|
|
@@ -0,0 +1,3326 @@
|
|
|
+# 文档
|
|
|
+
|
|
|
+## 摄像头控制 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 | 否 | - | 摄像头名称 | 主摄像头 |
|
|
|
+| └ machineId | String | 否 | - | 所属机器 ID | machine_001 |
|
|
|
+| └ status | String | 否 | - | 摄像头状态: ONLINE, OFFLINE | ONLINE |
|
|
|
+| └ capability | String | 否 | - | 摄像头能力: switch_only, ptz_enabled | ptz_enabled |
|
|
|
+| └ ptzSupported | Boolean | 否 | - | 是否支持 PTZ | true |
|
|
|
+| └ channels | List<ChannelDTO> | 否 | | 通道列表 (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": [
|
|
|
+ {
|
|
|
+ "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"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 获取摄像头信息
|
|
|
+
|
|
|
+维护人: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 | 否 | - | 摄像头名称 | 主摄像头 |
|
|
|
+| └ machineId | String | 否 | - | 所属机器 ID | machine_001 |
|
|
|
+| └ status | String | 否 | - | 摄像头状态: ONLINE, OFFLINE | ONLINE |
|
|
|
+| └ capability | String | 否 | - | 摄像头能力: switch_only, ptz_enabled | ptz_enabled |
|
|
|
+| └ ptzSupported | Boolean | 否 | - | 是否支持 PTZ | true |
|
|
|
+| └ channels | List<ChannelDTO> | 否 | | 通道列表 (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": {
|
|
|
+ "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"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 切换摄像头通道(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 | 水平移动速度<br>负值向左,正值向右<br>范围: -100 ~ 100 | 0 |
|
|
|
+| tilt | Integer | 否 | 100 | 垂直移动速度<br>负值向下,正值向上<br>范围: -100 ~ 100 | 0 |
|
|
|
+| zoom | Integer | 否 | 100 | 缩放速度<br>负值缩小,正值放大<br>范围: -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": {}
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+## 摄像头管理
|
|
|
+
|
|
|
+### 获取摄像头列表(分页)
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/admin/cameras/list
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/cameras/list
|
|
|
+
|
|
|
+描述:获取摄像头列表(分页)
|
|
|
+
|
|
|
+ContentType:`application/json`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Body Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --------- | ------- | ---- | -------- | ----------------------------------------------- | ----------- |
|
|
|
+| page | Integer | 否 | - | 页码 (从 1 开始) | 1 |
|
|
|
+| size | Integer | 否 | - | 每页条数 | 10 |
|
|
|
+| keyword | String | 否 | - | 搜索关键词 (模糊匹配名称、ID 等) | 摄像头 |
|
|
|
+| enabled | Boolean | 否 | - | 启用状态过滤 (null=全部, true=启用, false=禁用) | true |
|
|
|
+| sortBy | String | 否 | - | 排序字段 | createdAt |
|
|
|
+| sortDir | String | 否 | - | 排序方向 (ASC/DESC) | DESC |
|
|
|
+| machineId | String | 否 | - | 机器 ID 过滤 | machine_001 |
|
|
|
+| status | String | 否 | - | 在线状态过滤 (ONLINE/OFFLINE) | ONLINE |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "page": 1,
|
|
|
+ "size": 10,
|
|
|
+ "keyword": "摄像头",
|
|
|
+ "enabled": true,
|
|
|
+ "sortBy": "createdAt",
|
|
|
+ "sortDir": "DESC",
|
|
|
+ "machineId": "machine_001",
|
|
|
+ "status": "ONLINE"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | | 响应数据 (ActualType: PageResponse) | |
|
|
|
+| └ list | List<T> | 否 | | 数据列表 (ActualType: T) | |
|
|
|
+| └ 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<ChannelInfoDTO> | 否 | | 通道列表 (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 |
|
|
|
+| └ page | Integer | 否 | - | 当前页码 (从 1 开始) | 1 |
|
|
|
+| └ size | Integer | 否 | - | 每页条数 | 10 |
|
|
|
+| └ total | Long | 否 | - | 总记录数 | 100 |
|
|
|
+| └ totalPages | Integer | 否 | - | 总页数 | 10 |
|
|
|
+| └ hasNext | Boolean | 否 | - | 是否有下一页 | true |
|
|
|
+| └ hasPrevious | Boolean | 否 | - | 是否有上一页 | false |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {
|
|
|
+ "list": [
|
|
|
+ {
|
|
|
+ "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"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "page": 1,
|
|
|
+ "size": 10,
|
|
|
+ "total": 100,
|
|
|
+ "totalPages": 10,
|
|
|
+ "hasNext": true,
|
|
|
+ "hasPrevious": false
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 获取摄像头列表(全部,不分页)
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/admin/cameras/listAll
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/admin/cameras/listAll
|
|
|
+
|
|
|
+描述:获取摄像头列表(全部,不分页)
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Query Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --------- | ------ | ---- | -------- | --------------- | ----------- |
|
|
|
+| machineId | string | 否 | - | 机器 ID(可选) | machine_001 |
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | 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<ChannelInfoDTO> | 否 | | 通道列表 (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 |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "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"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 获取摄像头详情
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/admin/cameras/detail
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/admin/cameras/detail
|
|
|
+
|
|
|
+描述:获取摄像头详情
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Query Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---- | ----- | ---- | -------- | ------------- | ------ |
|
|
|
+| id | int64 | 是 | - | 摄像头主键 ID | 1 |
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | 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<ChannelInfoDTO> | 否 | | 通道列表 (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 |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "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"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 添加摄像头
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/admin/cameras/add
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/cameras/add
|
|
|
+
|
|
|
+描述:添加摄像头
|
|
|
+
|
|
|
+ContentType:`application/json`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Body Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
|
|
|
+| cameraId | String | 是 | 50 | 摄像头 ID(唯一标识)<br>Validate[max: 50; ] | cam_001 |
|
|
|
+| name | String | 是 | 100 | 名称<br>Validate[max: 100; ] | 主摄像头 |
|
|
|
+| ip | String | 是 | - | IP 地址<br>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 | 用户名<br>Validate[max: 50; ] | admin |
|
|
|
+| password | String | 否 | 100 | 密码<br>Validate[max: 100; ] | password123 |
|
|
|
+| brand | String | 否 | 30 | 品牌<br>Validate[max: 30; ] | hikvision |
|
|
|
+| capability | String | 否 | - | 能力: switch_only, ptz_enabled<br>Validate[regexp: ^(switch_only | ptz_enabled)$; ] | ptz_enabled |
|
|
|
+| machineId | String | 否 | - | 所属机器 ID | machine_001 |
|
|
|
+| channels | List<CameraAddRequest$ChannelAddRequest> | 否 | | 通道列表 (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
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | 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<ChannelInfoDTO> | 否 | | 通道列表 (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 |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "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"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 更新摄像头
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/admin/cameras/update
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/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<CameraUpdateRequest$ChannelUpdateRequest> | 否 | | 通道列表 (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
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | 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<ChannelInfoDTO> | 否 | | 通道列表 (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 |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "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"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 删除摄像头
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/admin/cameras/delete
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/cameras/delete
|
|
|
+
|
|
|
+描述:删除摄像头
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Query Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---- | ----- | ---- | -------- | ------------- | ------ |
|
|
|
+| id | int64 | 是 | - | 摄像头主键 ID | 1 |
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---------- | ------- | ---- | -------- | --------------------------- | ------ |
|
|
|
+| 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/cameras/check
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/cameras/check
|
|
|
+
|
|
|
+描述:检测摄像头连通性
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Query Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---- | ----- | ---- | -------- | ------------- | ------ |
|
|
|
+| id | int64 | 是 | - | 摄像头主键 ID | 1 |
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---------- | ------- | ---- | -------- | ------------------------------ | ------ |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | boolean | 否 | - | 响应数据 (ActualType: Boolean) | |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": false
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 获取摄像头快照
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/admin/cameras/snapshot
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/admin/cameras/snapshot
|
|
|
+
|
|
|
+描述:获取摄像头快照
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Query Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---- | ----- | ---- | -------- | ------------- | ------ |
|
|
|
+| id | int64 | 是 | - | 摄像头主键 ID | 1 |
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---------- | ------------- | ---- | -------- | --------------------------- | ------ |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | array | 否 | | 响应数据 (ActualType: byte) | |
|
|
|
+| └ - | array[byte[]] | 否 | - | array of byte[] | |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": [
|
|
|
+ {
|
|
|
+ " -": ""
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### PTZ 控制
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/admin/cameras/ptz
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/cameras/ptz
|
|
|
+
|
|
|
+描述:PTZ 控制
|
|
|
+
|
|
|
+ContentType:`application/json`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Body Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ------ | ------ | ---- | -------- | ---------------- | ------ |
|
|
|
+| id | Long | 否 | - | 摄像头 ID | 1 |
|
|
|
+| action | String | 否 | - | PTZ 动作 | UP |
|
|
|
+| speed | Float | 否 | - | 速度 (0.0 - 1.0) | 0.5 |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "id": 1,
|
|
|
+ "action": "UP",
|
|
|
+ "speed": 0.5
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---------- | ------- | ---- | -------- | ------------------------------ | ------ |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | boolean | 否 | - | 响应数据 (ActualType: Boolean) | |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": false
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+## 机器管理
|
|
|
+
|
|
|
+### 获取机器列表(分页)
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/admin/machines/list
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/machines/list
|
|
|
+
|
|
|
+描述:获取机器列表(分页)
|
|
|
+
|
|
|
+ContentType:`application/json`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Body Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ------- | ------- | ---- | -------- | ----------------------------------------------- | --------- |
|
|
|
+| page | Integer | 否 | - | 页码 (从 1 开始) | 1 |
|
|
|
+| size | Integer | 否 | - | 每页条数 | 10 |
|
|
|
+| keyword | String | 否 | - | 搜索关键词 (模糊匹配名称、ID 等) | 摄像头 |
|
|
|
+| enabled | Boolean | 否 | - | 启用状态过滤 (null=全部, true=启用, false=禁用) | true |
|
|
|
+| sortBy | String | 否 | - | 排序字段 | createdAt |
|
|
|
+| sortDir | String | 否 | - | 排序方向 (ASC/DESC) | DESC |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "page": 1,
|
|
|
+ "size": 10,
|
|
|
+ "keyword": "摄像头",
|
|
|
+ "enabled": true,
|
|
|
+ "sortBy": "createdAt",
|
|
|
+ "sortDir": "DESC"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ------------- | ------------- | ---- | -------- | ----------------------------------- | ------------------- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | | 响应数据 (ActualType: PageResponse) | |
|
|
|
+| └ list | List<T> | 否 | | 数据列表 (ActualType: T) | |
|
|
|
+| └ 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 |
|
|
|
+| └ page | Integer | 否 | - | 当前页码 (从 1 开始) | 1 |
|
|
|
+| └ size | Integer | 否 | - | 每页条数 | 10 |
|
|
|
+| └ total | Long | 否 | - | 总记录数 | 100 |
|
|
|
+| └ totalPages | Integer | 否 | - | 总页数 | 10 |
|
|
|
+| └ hasNext | Boolean | 否 | - | 是否有下一页 | true |
|
|
|
+| └ hasPrevious | Boolean | 否 | - | 是否有上一页 | false |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {
|
|
|
+ "list": [
|
|
|
+ {
|
|
|
+ "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"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "page": 1,
|
|
|
+ "size": 10,
|
|
|
+ "total": 100,
|
|
|
+ "totalPages": 10,
|
|
|
+ "hasNext": true,
|
|
|
+ "hasPrevious": false
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 获取机器列表(全部,不分页)
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/admin/machines/listAll
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/admin/machines/listAll
|
|
|
+
|
|
|
+描述:获取机器列表(全部,不分页)
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ------------- | ------------- | ---- | -------- | --------------------------- | ------------------- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | 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 |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "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"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 获取机器详情
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/admin/machines/detail
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/admin/machines/detail
|
|
|
+
|
|
|
+描述:获取机器详情
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Query Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---- | ----- | ---- | -------- | ----------- | ------ |
|
|
|
+| id | int64 | 是 | - | 机器主键 ID | 1 |
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ------------- | ------------- | ---- | -------- | --------------------------------- | ------------------- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | 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 |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "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"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 添加机器
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/admin/machines/add
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/machines/add
|
|
|
+
|
|
|
+描述:添加机器
|
|
|
+
|
|
|
+ContentType:`application/json`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Body Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ----------- | ------ | ---- | -------- | ------------------------------------------ | ----------- |
|
|
|
+| machineId | String | 是 | 50 | 机器 ID(唯一标识)<br>Validate[max: 50; ] | machine_001 |
|
|
|
+| name | String | 是 | 100 | 名称<br>Validate[max: 100; ] | 1 号机 |
|
|
|
+| location | String | 否 | 200 | 位置<br>Validate[max: 200; ] | A 区 1 楼 |
|
|
|
+| description | String | 否 | 500 | 描述<br>Validate[max: 500; ] | 主力机器 |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "machineId": "machine_001",
|
|
|
+ "name": "1号机",
|
|
|
+ "location": "A区1楼",
|
|
|
+ "description": "主力机器"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ------------- | ------------- | ---- | -------- | --------------------------------- | ------------------- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | 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 |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "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"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 更新机器
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/admin/machines/update
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/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
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ------------- | ------------- | ---- | -------- | --------------------------------- | ------------------- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | 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 |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "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"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 删除机器
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/admin/machines/delete
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/machines/delete
|
|
|
+
|
|
|
+描述:删除机器
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Query Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---- | ----- | ---- | -------- | ----------- | ------ |
|
|
|
+| id | int64 | 是 | - | 机器主键 ID | 1 |
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---------- | ------- | ---- | -------- | --------------------------- | ------ |
|
|
|
+| 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/stream-channels/list
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/stream-channels/list
|
|
|
+
|
|
|
+描述:获取推流通道列表(分页)
|
|
|
+
|
|
|
+ContentType:`application/json`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Body Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ------- | ------- | ---- | -------- | ----------------------------------------------- | --------- |
|
|
|
+| page | Integer | 否 | - | 页码 (从 1 开始) | 1 |
|
|
|
+| size | Integer | 否 | - | 每页条数 | 10 |
|
|
|
+| keyword | String | 否 | - | 搜索关键词 (模糊匹配名称、ID 等) | 摄像头 |
|
|
|
+| enabled | Boolean | 否 | - | 启用状态过滤 (null=全部, true=启用, false=禁用) | true |
|
|
|
+| sortBy | String | 否 | - | 排序字段 | createdAt |
|
|
|
+| sortDir | String | 否 | - | 排序方向 (ASC/DESC) | DESC |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "page": 1,
|
|
|
+ "size": 10,
|
|
|
+ "keyword": "摄像头",
|
|
|
+ "enabled": true,
|
|
|
+ "sortBy": "createdAt",
|
|
|
+ "sortDir": "DESC"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | | 响应数据 (ActualType: PageResponse) | |
|
|
|
+| └ list | List<T> | 否 | | 数据列表 (ActualType: T) | |
|
|
|
+| └ id | Long | 否 | - | 主键 ID | 1 |
|
|
|
+| └ channelId | String | 否 | - | 通道 ID | cf_channel_001 |
|
|
|
+| └ name | String | 否 | - | 通道名称 | 主推流通道 |
|
|
|
+| └ accountId | String | 否 | - | Cloudflare 账户 ID | 5544eac7cfb260d4fec9467d49513cea |
|
|
|
+| └ liveInputId | String | 否 | - | Cloudflare Live Input ID | b51e49994b6fd9e56b6f1fdfcd339fe6 |
|
|
|
+| └ customerSubdomain | String | 否 | - | 客户子域名 | customer-pj89kn2ke2tcuh19 |
|
|
|
+| └ mode | String | 否 | - | 推流模式: WHIP / RTMPS / SRT | WHIP |
|
|
|
+| └ whipUrl | String | 否 | - | WHIP 推流地址 | https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/publish |
|
|
|
+| └ rtmpsUrl | String | 否 | - | RTMPS 推流地址 | rtmps://live.cloudflare.com:443/live/xxx |
|
|
|
+| └ hlsPlaybackUrl | String | 否 | - | HLS 播放地址 | https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/manifest/video.m3u8 |
|
|
|
+| └ whepPlaybackUrl | String | 否 | - | WHEP 播放地址 (WebRTC) | https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/play |
|
|
|
+| └ recordingEnabled | Boolean | 否 | - | 是否启用录制 | false |
|
|
|
+| └ enabled | Boolean | 否 | - | 是否启用 | true |
|
|
|
+| └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2024-01-15T10:30:00 |
|
|
|
+| └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2024-01-15T10:30:00 |
|
|
|
+| └ page | Integer | 否 | - | 当前页码 (从 1 开始) | 1 |
|
|
|
+| └ size | Integer | 否 | - | 每页条数 | 10 |
|
|
|
+| └ total | Long | 否 | - | 总记录数 | 100 |
|
|
|
+| └ totalPages | Integer | 否 | - | 总页数 | 10 |
|
|
|
+| └ hasNext | Boolean | 否 | - | 是否有下一页 | true |
|
|
|
+| └ hasPrevious | Boolean | 否 | - | 是否有上一页 | false |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {
|
|
|
+ "list": [
|
|
|
+ {
|
|
|
+ "id": 1,
|
|
|
+ "channelId": "cf_channel_001",
|
|
|
+ "name": "主推流通道",
|
|
|
+ "accountId": "5544eac7cfb260d4fec9467d49513cea",
|
|
|
+ "liveInputId": "b51e49994b6fd9e56b6f1fdfcd339fe6",
|
|
|
+ "customerSubdomain": "customer-pj89kn2ke2tcuh19",
|
|
|
+ "mode": "WHIP",
|
|
|
+ "whipUrl": "https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/publish",
|
|
|
+ "rtmpsUrl": "rtmps://live.cloudflare.com:443/live/xxx",
|
|
|
+ "hlsPlaybackUrl": "https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/manifest/video.m3u8",
|
|
|
+ "whepPlaybackUrl": "https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/play",
|
|
|
+ "recordingEnabled": false,
|
|
|
+ "enabled": true,
|
|
|
+ "createdAt": "2024-01-15T10:30:00",
|
|
|
+ "updatedAt": "2024-01-15T10:30:00"
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "page": 1,
|
|
|
+ "size": 10,
|
|
|
+ "total": 100,
|
|
|
+ "totalPages": 10,
|
|
|
+ "hasNext": true,
|
|
|
+ "hasPrevious": false
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 获取推流通道列表(全部,不分页)
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/admin/stream-channels/listAll
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/admin/stream-channels/listAll
|
|
|
+
|
|
|
+描述:获取推流通道列表(全部,不分页)
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | array | 否 | | 响应数据 (ActualType: List) | |
|
|
|
+| └ id | Long | 否 | - | 主键 ID | 1 |
|
|
|
+| └ channelId | String | 否 | - | 通道 ID | cf_channel_001 |
|
|
|
+| └ name | String | 否 | - | 通道名称 | 主推流通道 |
|
|
|
+| └ accountId | String | 否 | - | Cloudflare 账户 ID | 5544eac7cfb260d4fec9467d49513cea |
|
|
|
+| └ liveInputId | String | 否 | - | Cloudflare Live Input ID | b51e49994b6fd9e56b6f1fdfcd339fe6 |
|
|
|
+| └ customerSubdomain | String | 否 | - | 客户子域名 | customer-pj89kn2ke2tcuh19 |
|
|
|
+| └ mode | String | 否 | - | 推流模式: WHIP / RTMPS / SRT | WHIP |
|
|
|
+| └ whipUrl | String | 否 | - | WHIP 推流地址 | https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/publish |
|
|
|
+| └ rtmpsUrl | String | 否 | - | RTMPS 推流地址 | rtmps://live.cloudflare.com:443/live/xxx |
|
|
|
+| └ hlsPlaybackUrl | String | 否 | - | HLS 播放地址 | https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/manifest/video.m3u8 |
|
|
|
+| └ whepPlaybackUrl | String | 否 | - | WHEP 播放地址 (WebRTC) | https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/play |
|
|
|
+| └ recordingEnabled | Boolean | 否 | - | 是否启用录制 | false |
|
|
|
+| └ enabled | Boolean | 否 | - | 是否启用 | true |
|
|
|
+| └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2024-01-15T10:30:00 |
|
|
|
+| └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2024-01-15T10:30:00 |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": [
|
|
|
+ {
|
|
|
+ "id": 1,
|
|
|
+ "channelId": "cf_channel_001",
|
|
|
+ "name": "主推流通道",
|
|
|
+ "accountId": "5544eac7cfb260d4fec9467d49513cea",
|
|
|
+ "liveInputId": "b51e49994b6fd9e56b6f1fdfcd339fe6",
|
|
|
+ "customerSubdomain": "customer-pj89kn2ke2tcuh19",
|
|
|
+ "mode": "WHIP",
|
|
|
+ "whipUrl": "https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/publish",
|
|
|
+ "rtmpsUrl": "rtmps://live.cloudflare.com:443/live/xxx",
|
|
|
+ "hlsPlaybackUrl": "https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/manifest/video.m3u8",
|
|
|
+ "whepPlaybackUrl": "https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/play",
|
|
|
+ "recordingEnabled": false,
|
|
|
+ "enabled": true,
|
|
|
+ "createdAt": "2024-01-15T10:30:00",
|
|
|
+ "updatedAt": "2024-01-15T10:30:00"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 获取推流通道详情
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/admin/stream-channels/detail
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/admin/stream-channels/detail
|
|
|
+
|
|
|
+描述:获取推流通道详情
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Query Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---- | ----- | ---- | -------- | --------------- | ------ |
|
|
|
+| id | int64 | 是 | - | 推流通道主键 ID | 1 |
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | | 响应数据 (ActualType: StreamChannelInfoDTO) | |
|
|
|
+| └ id | Long | 否 | - | 主键 ID | 1 |
|
|
|
+| └ channelId | String | 否 | - | 通道 ID | cf_channel_001 |
|
|
|
+| └ name | String | 否 | - | 通道名称 | 主推流通道 |
|
|
|
+| └ accountId | String | 否 | - | Cloudflare 账户 ID | 5544eac7cfb260d4fec9467d49513cea |
|
|
|
+| └ liveInputId | String | 否 | - | Cloudflare Live Input ID | b51e49994b6fd9e56b6f1fdfcd339fe6 |
|
|
|
+| └ customerSubdomain | String | 否 | - | 客户子域名 | customer-pj89kn2ke2tcuh19 |
|
|
|
+| └ mode | String | 否 | - | 推流模式: WHIP / RTMPS / SRT | WHIP |
|
|
|
+| └ whipUrl | String | 否 | - | WHIP 推流地址 | https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/publish |
|
|
|
+| └ rtmpsUrl | String | 否 | - | RTMPS 推流地址 | rtmps://live.cloudflare.com:443/live/xxx |
|
|
|
+| └ hlsPlaybackUrl | String | 否 | - | HLS 播放地址 | https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/manifest/video.m3u8 |
|
|
|
+| └ whepPlaybackUrl | String | 否 | - | WHEP 播放地址 (WebRTC) | https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/play |
|
|
|
+| └ recordingEnabled | Boolean | 否 | - | 是否启用录制 | false |
|
|
|
+| └ enabled | Boolean | 否 | - | 是否启用 | true |
|
|
|
+| └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2024-01-15T10:30:00 |
|
|
|
+| └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2024-01-15T10:30:00 |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {
|
|
|
+ "id": 1,
|
|
|
+ "channelId": "cf_channel_001",
|
|
|
+ "name": "主推流通道",
|
|
|
+ "accountId": "5544eac7cfb260d4fec9467d49513cea",
|
|
|
+ "liveInputId": "b51e49994b6fd9e56b6f1fdfcd339fe6",
|
|
|
+ "customerSubdomain": "customer-pj89kn2ke2tcuh19",
|
|
|
+ "mode": "WHIP",
|
|
|
+ "whipUrl": "https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/publish",
|
|
|
+ "rtmpsUrl": "rtmps://live.cloudflare.com:443/live/xxx",
|
|
|
+ "hlsPlaybackUrl": "https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/manifest/video.m3u8",
|
|
|
+ "whepPlaybackUrl": "https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/play",
|
|
|
+ "recordingEnabled": false,
|
|
|
+ "enabled": true,
|
|
|
+ "createdAt": "2024-01-15T10:30:00",
|
|
|
+ "updatedAt": "2024-01-15T10:30:00"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 添加推流通道
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/admin/stream-channels/add
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/stream-channels/add
|
|
|
+
|
|
|
+描述:添加推流通道
|
|
|
+
|
|
|
+ContentType:`application/json`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Body Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| channelId | String | 是 | - | 通道 ID | cf_channel_001 |
|
|
|
+| name | String | 是 | - | 通道名称 | 主推流通道 |
|
|
|
+| accountId | String | 否 | - | Cloudflare 账户 ID | 5544eac7cfb260d4fec9467d49513cea |
|
|
|
+| apiToken | String | 否 | - | Cloudflare API Token | d_f4nGUKFlB66MMMIS3NfVlUbn0A0p4jlrW5BbZW |
|
|
|
+| liveInputId | String | 是 | - | Cloudflare Live Input ID | b51e49994b6fd9e56b6f1fdfcd339fe6 |
|
|
|
+| streamKey | String | 否 | - | 流密钥 (用于 RTMPS) | 8c108b4025d3278b188b443e8a6c5503kb51e49994b6fd9e56b6f1fdfcd339fe6 |
|
|
|
+| customerSubdomain | String | 是 | - | 客户子域名 | customer-pj89kn2ke2tcuh19 |
|
|
|
+| mode | String | 否 | - | 推流模式: WHIP / RTMPS / SRT | WHIP |
|
|
|
+| recordingEnabled | Boolean | 否 | - | 是否启用录制 | false |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "channelId": "cf_channel_001",
|
|
|
+ "name": "主推流通道",
|
|
|
+ "accountId": "5544eac7cfb260d4fec9467d49513cea",
|
|
|
+ "apiToken": "d_f4nGUKFlB66MMMIS3NfVlUbn0A0p4jlrW5BbZW",
|
|
|
+ "liveInputId": "b51e49994b6fd9e56b6f1fdfcd339fe6",
|
|
|
+ "streamKey": "8c108b4025d3278b188b443e8a6c5503kb51e49994b6fd9e56b6f1fdfcd339fe6",
|
|
|
+ "customerSubdomain": "customer-pj89kn2ke2tcuh19",
|
|
|
+ "mode": "WHIP",
|
|
|
+ "recordingEnabled": false
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | | 响应数据 (ActualType: StreamChannelInfoDTO) | |
|
|
|
+| └ id | Long | 否 | - | 主键 ID | 1 |
|
|
|
+| └ channelId | String | 否 | - | 通道 ID | cf_channel_001 |
|
|
|
+| └ name | String | 否 | - | 通道名称 | 主推流通道 |
|
|
|
+| └ accountId | String | 否 | - | Cloudflare 账户 ID | 5544eac7cfb260d4fec9467d49513cea |
|
|
|
+| └ liveInputId | String | 否 | - | Cloudflare Live Input ID | b51e49994b6fd9e56b6f1fdfcd339fe6 |
|
|
|
+| └ customerSubdomain | String | 否 | - | 客户子域名 | customer-pj89kn2ke2tcuh19 |
|
|
|
+| └ mode | String | 否 | - | 推流模式: WHIP / RTMPS / SRT | WHIP |
|
|
|
+| └ whipUrl | String | 否 | - | WHIP 推流地址 | https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/publish |
|
|
|
+| └ rtmpsUrl | String | 否 | - | RTMPS 推流地址 | rtmps://live.cloudflare.com:443/live/xxx |
|
|
|
+| └ hlsPlaybackUrl | String | 否 | - | HLS 播放地址 | https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/manifest/video.m3u8 |
|
|
|
+| └ whepPlaybackUrl | String | 否 | - | WHEP 播放地址 (WebRTC) | https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/play |
|
|
|
+| └ recordingEnabled | Boolean | 否 | - | 是否启用录制 | false |
|
|
|
+| └ enabled | Boolean | 否 | - | 是否启用 | true |
|
|
|
+| └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2024-01-15T10:30:00 |
|
|
|
+| └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2024-01-15T10:30:00 |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {
|
|
|
+ "id": 1,
|
|
|
+ "channelId": "cf_channel_001",
|
|
|
+ "name": "主推流通道",
|
|
|
+ "accountId": "5544eac7cfb260d4fec9467d49513cea",
|
|
|
+ "liveInputId": "b51e49994b6fd9e56b6f1fdfcd339fe6",
|
|
|
+ "customerSubdomain": "customer-pj89kn2ke2tcuh19",
|
|
|
+ "mode": "WHIP",
|
|
|
+ "whipUrl": "https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/publish",
|
|
|
+ "rtmpsUrl": "rtmps://live.cloudflare.com:443/live/xxx",
|
|
|
+ "hlsPlaybackUrl": "https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/manifest/video.m3u8",
|
|
|
+ "whepPlaybackUrl": "https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/play",
|
|
|
+ "recordingEnabled": false,
|
|
|
+ "enabled": true,
|
|
|
+ "createdAt": "2024-01-15T10:30:00",
|
|
|
+ "updatedAt": "2024-01-15T10:30:00"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 更新推流通道
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/admin/stream-channels/update
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/stream-channels/update
|
|
|
+
|
|
|
+描述:更新推流通道
|
|
|
+
|
|
|
+ContentType:`application/json`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Body Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| id | Long | 是 | - | 主键 ID | 1 |
|
|
|
+| name | String | 否 | - | 通道名称 | 主推流通道 |
|
|
|
+| accountId | String | 否 | - | Cloudflare 账户 ID | 5544eac7cfb260d4fec9467d49513cea |
|
|
|
+| apiToken | String | 否 | - | Cloudflare API Token | d_f4nGUKFlB66MMMIS3NfVlUbn0A0p4jlrW5BbZW |
|
|
|
+| liveInputId | String | 否 | - | Cloudflare Live Input ID | b51e49994b6fd9e56b6f1fdfcd339fe6 |
|
|
|
+| streamKey | String | 否 | - | 流密钥 (用于 RTMPS) | 8c108b4025d3278b188b443e8a6c5503kb51e49994b6fd9e56b6f1fdfcd339fe6 |
|
|
|
+| customerSubdomain | String | 否 | - | 客户子域名 | customer-pj89kn2ke2tcuh19 |
|
|
|
+| mode | String | 否 | - | 推流模式: WHIP / RTMPS / SRT | WHIP |
|
|
|
+| recordingEnabled | Boolean | 否 | - | 是否启用录制 | false |
|
|
|
+| enabled | Boolean | 否 | - | 是否启用 | true |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "id": 1,
|
|
|
+ "name": "主推流通道",
|
|
|
+ "accountId": "5544eac7cfb260d4fec9467d49513cea",
|
|
|
+ "apiToken": "d_f4nGUKFlB66MMMIS3NfVlUbn0A0p4jlrW5BbZW",
|
|
|
+ "liveInputId": "b51e49994b6fd9e56b6f1fdfcd339fe6",
|
|
|
+ "streamKey": "8c108b4025d3278b188b443e8a6c5503kb51e49994b6fd9e56b6f1fdfcd339fe6",
|
|
|
+ "customerSubdomain": "customer-pj89kn2ke2tcuh19",
|
|
|
+ "mode": "WHIP",
|
|
|
+ "recordingEnabled": false,
|
|
|
+ "enabled": true
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | | 响应数据 (ActualType: StreamChannelInfoDTO) | |
|
|
|
+| └ id | Long | 否 | - | 主键 ID | 1 |
|
|
|
+| └ channelId | String | 否 | - | 通道 ID | cf_channel_001 |
|
|
|
+| └ name | String | 否 | - | 通道名称 | 主推流通道 |
|
|
|
+| └ accountId | String | 否 | - | Cloudflare 账户 ID | 5544eac7cfb260d4fec9467d49513cea |
|
|
|
+| └ liveInputId | String | 否 | - | Cloudflare Live Input ID | b51e49994b6fd9e56b6f1fdfcd339fe6 |
|
|
|
+| └ customerSubdomain | String | 否 | - | 客户子域名 | customer-pj89kn2ke2tcuh19 |
|
|
|
+| └ mode | String | 否 | - | 推流模式: WHIP / RTMPS / SRT | WHIP |
|
|
|
+| └ whipUrl | String | 否 | - | WHIP 推流地址 | https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/publish |
|
|
|
+| └ rtmpsUrl | String | 否 | - | RTMPS 推流地址 | rtmps://live.cloudflare.com:443/live/xxx |
|
|
|
+| └ hlsPlaybackUrl | String | 否 | - | HLS 播放地址 | https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/manifest/video.m3u8 |
|
|
|
+| └ whepPlaybackUrl | String | 否 | - | WHEP 播放地址 (WebRTC) | https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/play |
|
|
|
+| └ recordingEnabled | Boolean | 否 | - | 是否启用录制 | false |
|
|
|
+| └ enabled | Boolean | 否 | - | 是否启用 | true |
|
|
|
+| └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2024-01-15T10:30:00 |
|
|
|
+| └ updatedAt | LocalDateTime | 否 | - | 更新时间 | 2024-01-15T10:30:00 |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {
|
|
|
+ "id": 1,
|
|
|
+ "channelId": "cf_channel_001",
|
|
|
+ "name": "主推流通道",
|
|
|
+ "accountId": "5544eac7cfb260d4fec9467d49513cea",
|
|
|
+ "liveInputId": "b51e49994b6fd9e56b6f1fdfcd339fe6",
|
|
|
+ "customerSubdomain": "customer-pj89kn2ke2tcuh19",
|
|
|
+ "mode": "WHIP",
|
|
|
+ "whipUrl": "https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/publish",
|
|
|
+ "rtmpsUrl": "rtmps://live.cloudflare.com:443/live/xxx",
|
|
|
+ "hlsPlaybackUrl": "https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/manifest/video.m3u8",
|
|
|
+ "whepPlaybackUrl": "https://customer-pj89kn2ke2tcuh19.cloudflarestream.com/b51e49994b6fd9e56b6f1fdfcd339fe6/webRTC/play",
|
|
|
+ "recordingEnabled": false,
|
|
|
+ "enabled": true,
|
|
|
+ "createdAt": "2024-01-15T10:30:00",
|
|
|
+ "updatedAt": "2024-01-15T10:30:00"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 删除推流通道
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/admin/stream-channels/delete
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/stream-channels/delete
|
|
|
+
|
|
|
+描述:删除推流通道
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Query Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---- | ----- | ---- | -------- | --------------- | ------ |
|
|
|
+| id | int64 | 是 | - | 推流通道主键 ID | 1 |
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---------- | ------- | ---- | -------- | --------------------------- | ------ |
|
|
|
+| 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/auth/login
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/auth/login
|
|
|
+
|
|
|
+描述:登录
|
|
|
+
|
|
|
+ContentType:`application/json`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Body Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| -------- | ------ | ---- | -------- | ----------------------------- | ------ |
|
|
|
+| username | String | 是 | 50 | 用户名<br>Validate[max: 50; ] | admin |
|
|
|
+| password | String | 是 | 100 | 密码<br>Validate[max: 100; ] | 123456 |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "username": "admin",
|
|
|
+ "password": "123456"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | 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 |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {
|
|
|
+ "token": "eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiJ9.xxx",
|
|
|
+ "tokenType": "Bearer",
|
|
|
+ "expiresIn": 86400,
|
|
|
+ "admin": {
|
|
|
+ "id": 1,
|
|
|
+ "username": "admin",
|
|
|
+ "nickname": "管理员",
|
|
|
+ "role": "ADMIN",
|
|
|
+ "lastLoginAt": "2026-01-07T10:00:00"
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 登出
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/admin/auth/logout
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/auth/logout
|
|
|
+
|
|
|
+描述:登出
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---------- | ------- | ---- | -------- | --------------------------- | ------ |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | - | 响应数据 (ActualType: Void) | |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {}
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 获取当前用户信息(直接从 Token 解析,不查询数据库)
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/admin/auth/info
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/admin/auth/info
|
|
|
+
|
|
|
+描述:获取当前用户信息(直接从 Token 解析,不查询数据库)
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ------------- | ------------- | ---- | -------- | ----------------------------------- | ------------------- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | | 响应数据 (ActualType: AdminInfoDTO) | |
|
|
|
+| └ id | Long | 否 | - | 用户 ID | 1 |
|
|
|
+| └ username | String | 否 | - | 用户名 | admin |
|
|
|
+| └ nickname | String | 否 | - | 昵称 | 管理员 |
|
|
|
+| └ role | String | 否 | - | 角色 | ADMIN |
|
|
|
+| └ lastLoginAt | LocalDateTime | 否 | - | 最后登录时间 | 2026-01-07T10:00:00 |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {
|
|
|
+ "id": 1,
|
|
|
+ "username": "admin",
|
|
|
+ "nickname": "管理员",
|
|
|
+ "role": "ADMIN",
|
|
|
+ "lastLoginAt": "2026-01-07T10:00:00"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 修改密码
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/admin/auth/password
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/admin/auth/password
|
|
|
+
|
|
|
+描述:修改密码
|
|
|
+
|
|
|
+ContentType:`application/json`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Body Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ----------- | ------ | ---- | -------- | -------------------------------------------- | ----------- |
|
|
|
+| oldPassword | String | 是 | - | 旧密码 | oldpassword |
|
|
|
+| newPassword | String | 是 | 100 | 新密码(6-100 字符)<br>Validate[max: 100; ] | newpassword |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "oldPassword": "oldpassword",
|
|
|
+ "newPassword": "newpassword"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---------- | ------- | ---- | -------- | --------------------------- | ------ |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | - | 响应数据 (ActualType: Void) | |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {}
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+## 统计
|
|
|
+
|
|
|
+### 获取仪表盘统计数据
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/admin/stats/dashboard
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/admin/stats/dashboard
|
|
|
+
|
|
|
+描述:获取仪表盘统计数据
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---------------- | ------- | ---- | -------- | ---------------------------------------- | ------ |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | | 响应数据 (ActualType: DashboardStatsDTO) | |
|
|
|
+| └ machineTotal | Long | 否 | - | 机器总数 | 10 |
|
|
|
+| └ machineEnabled | Long | 否 | - | 启用的机器数 | 8 |
|
|
|
+| └ cameraTotal | Long | 否 | - | 摄像头总数 | 20 |
|
|
|
+| └ cameraOnline | Long | 否 | - | 在线摄像头数 | 15 |
|
|
|
+| └ cameraOffline | Long | 否 | - | 离线摄像头数 | 5 |
|
|
|
+| └ channelTotal | Long | 否 | - | 通道总数 | 40 |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {
|
|
|
+ "machineTotal": 10,
|
|
|
+ "machineEnabled": 8,
|
|
|
+ "cameraTotal": 20,
|
|
|
+ "cameraOnline": 15,
|
|
|
+ "cameraOffline": 5,
|
|
|
+ "channelTotal": 40
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+## 本地视频推流 Controller
|
|
|
+
|
|
|
+本地视频直接推送到 Cloudflare WHIP:
|
|
|
+
|
|
|
+- POST /stream/local/start 启动本地视频推流
|
|
|
+- POST /stream/local/stop 停止本地视频推流
|
|
|
+- GET /stream/local/{name} 获取推流状态
|
|
|
+- GET /stream/local/list 获取所有本地视频推流
|
|
|
+
|
|
|
+### 启动本地视频推流
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/stream/local/start
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/stream/local/start
|
|
|
+
|
|
|
+描述:启动本地视频推流
|
|
|
+
|
|
|
+ContentType:`application/json`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Body Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --------------- | ------- | ---- | -------- | ------------------------------------------- | ------ |
|
|
|
+| streamName | String | 否 | - | 流名称(唯一标识) | |
|
|
|
+| videoPath | String | 否 | - | 视频文件路径 | |
|
|
|
+| loop | Boolean | 否 | - | 是否循环播放 | true |
|
|
|
+| targetChannelId | String | 否 | - | 目标推流通道 ID(可选,不传则使用默认通道) | |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "streamName": "string",
|
|
|
+ "videoPath": "string",
|
|
|
+ "loop": true,
|
|
|
+ "targetChannelId": "string"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| -------------- | ------- | ---- | -------- | ------------------------------------------ | ------ |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | | 响应数据 (ActualType: LocalVideoStreamDTO) | |
|
|
|
+| └ streamName | String | 否 | - | 流名称 | |
|
|
|
+| └ sourceType | String | 否 | - | 源类型:local_video 或 rtsp_camera | |
|
|
|
+| └ sourcePath | String | 否 | - | 源路径(视频文件路径或 RTSP URL) | |
|
|
|
+| └ rtspUrl | String | 否 | - | MediaMTX 提供的 RTSP URL | |
|
|
|
+| └ loop | Boolean | 否 | - | 是否循环播放 | true |
|
|
|
+| └ streamTaskId | String | 否 | - | 推流任务 ID(如果已推送到 Cloudflare) | |
|
|
|
+| └ playbackUrl | String | 否 | - | 播放地址(Cloudflare HLS/WHEP) | |
|
|
|
+| └ status | String | 否 | - | 状态 | |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {
|
|
|
+ "streamName": "string",
|
|
|
+ "sourceType": "string",
|
|
|
+ "sourcePath": "string",
|
|
|
+ "rtspUrl": "string",
|
|
|
+ "loop": true,
|
|
|
+ "streamTaskId": "string",
|
|
|
+ "playbackUrl": "string",
|
|
|
+ "status": "string"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 停止本地视频推流
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/stream/local/stop
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/stream/local/stop
|
|
|
+
|
|
|
+描述:停止本地视频推流
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Query Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---------- | ------ | ---- | -------- | ------------------ | ------ |
|
|
|
+| streamName | string | 是 | - | No comments found. | |
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---------- | ------- | ---- | -------- | --------------------------- | ------ |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | - | 响应数据 (ActualType: Void) | |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {}
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 获取本地视频推流状态
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/stream/local/{streamName}
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/stream/local/{streamName}
|
|
|
+
|
|
|
+描述:获取本地视频推流状态
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### Path 参数
|
|
|
+
|
|
|
+| 名称 | 必填 | 描述 | 示例值 |
|
|
|
+| ---------- | ---- | ------------------ | ------ |
|
|
|
+| streamName | 是 | No comments found. | |
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| -------------- | ------- | ---- | -------- | ------------------------------------------ | ------ |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | | 响应数据 (ActualType: LocalVideoStreamDTO) | |
|
|
|
+| └ streamName | String | 否 | - | 流名称 | |
|
|
|
+| └ sourceType | String | 否 | - | 源类型:local_video 或 rtsp_camera | |
|
|
|
+| └ sourcePath | String | 否 | - | 源路径(视频文件路径或 RTSP URL) | |
|
|
|
+| └ rtspUrl | String | 否 | - | MediaMTX 提供的 RTSP URL | |
|
|
|
+| └ loop | Boolean | 否 | - | 是否循环播放 | true |
|
|
|
+| └ streamTaskId | String | 否 | - | 推流任务 ID(如果已推送到 Cloudflare) | |
|
|
|
+| └ playbackUrl | String | 否 | - | 播放地址(Cloudflare HLS/WHEP) | |
|
|
|
+| └ status | String | 否 | - | 状态 | |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {
|
|
|
+ "streamName": "string",
|
|
|
+ "sourceType": "string",
|
|
|
+ "sourcePath": "string",
|
|
|
+ "rtspUrl": "string",
|
|
|
+ "loop": true,
|
|
|
+ "streamTaskId": "string",
|
|
|
+ "playbackUrl": "string",
|
|
|
+ "status": "string"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 获取所有本地视频推流
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/stream/local/list
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/stream/local/list
|
|
|
+
|
|
|
+描述:获取所有本地视频推流
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| -------------- | ------- | ---- | -------- | -------------------------------------- | ------ |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | array | 否 | | 响应数据 (ActualType: List) | |
|
|
|
+| └ streamName | String | 否 | - | 流名称 | |
|
|
|
+| └ sourceType | String | 否 | - | 源类型:local_video 或 rtsp_camera | |
|
|
|
+| └ sourcePath | String | 否 | - | 源路径(视频文件路径或 RTSP URL) | |
|
|
|
+| └ rtspUrl | String | 否 | - | MediaMTX 提供的 RTSP URL | |
|
|
|
+| └ loop | Boolean | 否 | - | 是否循环播放 | true |
|
|
|
+| └ streamTaskId | String | 否 | - | 推流任务 ID(如果已推送到 Cloudflare) | |
|
|
|
+| └ playbackUrl | String | 否 | - | 播放地址(Cloudflare HLS/WHEP) | |
|
|
|
+| └ status | String | 否 | - | 状态 | |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": [
|
|
|
+ {
|
|
|
+ "streamName": "string",
|
|
|
+ "sourceType": "string",
|
|
|
+ "sourcePath": "string",
|
|
|
+ "rtspUrl": "string",
|
|
|
+ "loop": true,
|
|
|
+ "streamTaskId": "string",
|
|
|
+ "playbackUrl": "string",
|
|
|
+ "status": "string"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+## 推流服务 Controller
|
|
|
+
|
|
|
+推流管理 API 接口:
|
|
|
+
|
|
|
+- POST /stream/start 启动推流任务
|
|
|
+- POST /stream/stop 停止推流任务
|
|
|
+- GET /stream/task/{taskId} 获取任务状态
|
|
|
+- GET /stream/tasks 获取机器推流任务列表
|
|
|
+- GET /stream/tasks/active 获取所有活动任务
|
|
|
+- GET /stream/channels 获取推流通道列表
|
|
|
+- POST /stream/task/{taskId}/switch 切换推流源
|
|
|
+
|
|
|
+### 启动推流任务
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/stream/start
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/stream/start
|
|
|
+
|
|
|
+描述:启动推流任务
|
|
|
+
|
|
|
+ContentType:`application/json`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Body Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| machineId | String | 否 | - | 机器 ID(必填) | machine_001 |
|
|
|
+| cameraId | String | 否 | - | 摄像头 ID(必填) | hikvision_ptz |
|
|
|
+| cameraChannelId | String | 否 | - | 摄像头通道 ID(必填) | hik_main |
|
|
|
+| sourceRtspUrl | String | 否 | - | 源 RTSP 地址(可选,如不传则从摄像头服务获取) | rtsp://admin:password@192.168.1.101:554/stream1 |
|
|
|
+| targetChannelId | String | 否 | - | 目标推流通道 ID(可选,如不传则使用默认通道) | cf_channel_001 |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "machineId": "machine_001",
|
|
|
+ "cameraId": "hikvision_ptz",
|
|
|
+ "cameraChannelId": "hik_main",
|
|
|
+ "sourceRtspUrl": "rtsp://admin:password@192.168.1.101:554/stream1",
|
|
|
+ "targetChannelId": "cf_channel_001"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | | 响应数据 (ActualType: StreamTaskDTO) | |
|
|
|
+| └ taskId | String | 否 | - | 任务 ID | task_abc123def456 |
|
|
|
+| └ machineId | String | 否 | - | 机器 ID | machine_001 |
|
|
|
+| └ cameraId | String | 否 | - | 摄像头 ID | hikvision_ptz |
|
|
|
+| └ cameraChannelId | String | 否 | - | 摄像头通道 ID | hik_main |
|
|
|
+| └ sourceRtspUrl | String | 否 | - | 源 RTSP 地址 | rtsp://admin:password@192.168.1.101:554/stream1 |
|
|
|
+| └ status | String | 否 | - | 推流状态: IDLE, STARTING, STREAMING, STOPPED, ERROR | STREAMING |
|
|
|
+| └ statusDescription | String | 否 | - | 状态描述 | 推流中 |
|
|
|
+| └ hlsPlaybackUrl | String | 否 | - | HLS 播放地址 | https://customer-xxx.cloudflarestream.com/xxx/manifest/video.m3u8 |
|
|
|
+| └ errorMessage | String | 否 | - | 错误信息 | |
|
|
|
+| └ retryCount | int | 否 | - | 重试次数 | 0 |
|
|
|
+| └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2024-01-15T10:30:00 |
|
|
|
+| └ startedAt | LocalDateTime | 否 | - | 开始推流时间 | 2024-01-15T10:30:05 |
|
|
|
+| └ stoppedAt | LocalDateTime | 否 | - | 停止推流时间 | yyyy-MM-dd HH:mm:ss |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {
|
|
|
+ "taskId": "task_abc123def456",
|
|
|
+ "machineId": "machine_001",
|
|
|
+ "cameraId": "hikvision_ptz",
|
|
|
+ "cameraChannelId": "hik_main",
|
|
|
+ "sourceRtspUrl": "rtsp://admin:password@192.168.1.101:554/stream1",
|
|
|
+ "status": "STREAMING",
|
|
|
+ "statusDescription": "推流中",
|
|
|
+ "hlsPlaybackUrl": "https://customer-xxx.cloudflarestream.com/xxx/manifest/video.m3u8",
|
|
|
+ "errorMessage": "string",
|
|
|
+ "retryCount": 0,
|
|
|
+ "createdAt": "2024-01-15T10:30:00",
|
|
|
+ "startedAt": "2024-01-15T10:30:05",
|
|
|
+ "stoppedAt": "yyyy-MM-dd HH:mm:ss"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 停止推流任务
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/stream/stop
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/stream/stop
|
|
|
+
|
|
|
+描述:停止推流任务
|
|
|
+
|
|
|
+ContentType:`application/json`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Body Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --------- | ------ | ---- | -------- | ----------------------------------------------- | ----------------- |
|
|
|
+| taskId | String | 否 | - | 任务 ID(与 machineId 二选一) | task_abc123def456 |
|
|
|
+| machineId | String | 否 | - | 机器 ID(与 taskId 二选一,停止该机器所有推流) | machine_001 |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "taskId": "task_abc123def456",
|
|
|
+ "machineId": "machine_001"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---------- | ------- | ---- | -------- | --------------------------- | ------ |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | - | 响应数据 (ActualType: Void) | |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {}
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 获取任务状态
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/stream/task/{taskId}
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/stream/task/{taskId}
|
|
|
+
|
|
|
+描述:获取任务状态
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### Path 参数
|
|
|
+
|
|
|
+| 名称 | 必填 | 描述 | 示例值 |
|
|
|
+| ------ | ---- | ------- | ----------------- |
|
|
|
+| taskId | 是 | 任务 ID | task_abc123def456 |
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | | 响应数据 (ActualType: StreamTaskDTO) | |
|
|
|
+| └ taskId | String | 否 | - | 任务 ID | task_abc123def456 |
|
|
|
+| └ machineId | String | 否 | - | 机器 ID | machine_001 |
|
|
|
+| └ cameraId | String | 否 | - | 摄像头 ID | hikvision_ptz |
|
|
|
+| └ cameraChannelId | String | 否 | - | 摄像头通道 ID | hik_main |
|
|
|
+| └ sourceRtspUrl | String | 否 | - | 源 RTSP 地址 | rtsp://admin:password@192.168.1.101:554/stream1 |
|
|
|
+| └ status | String | 否 | - | 推流状态: IDLE, STARTING, STREAMING, STOPPED, ERROR | STREAMING |
|
|
|
+| └ statusDescription | String | 否 | - | 状态描述 | 推流中 |
|
|
|
+| └ hlsPlaybackUrl | String | 否 | - | HLS 播放地址 | https://customer-xxx.cloudflarestream.com/xxx/manifest/video.m3u8 |
|
|
|
+| └ errorMessage | String | 否 | - | 错误信息 | |
|
|
|
+| └ retryCount | int | 否 | - | 重试次数 | 0 |
|
|
|
+| └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2024-01-15T10:30:00 |
|
|
|
+| └ startedAt | LocalDateTime | 否 | - | 开始推流时间 | 2024-01-15T10:30:05 |
|
|
|
+| └ stoppedAt | LocalDateTime | 否 | - | 停止推流时间 | yyyy-MM-dd HH:mm:ss |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {
|
|
|
+ "taskId": "task_abc123def456",
|
|
|
+ "machineId": "machine_001",
|
|
|
+ "cameraId": "hikvision_ptz",
|
|
|
+ "cameraChannelId": "hik_main",
|
|
|
+ "sourceRtspUrl": "rtsp://admin:password@192.168.1.101:554/stream1",
|
|
|
+ "status": "STREAMING",
|
|
|
+ "statusDescription": "推流中",
|
|
|
+ "hlsPlaybackUrl": "https://customer-xxx.cloudflarestream.com/xxx/manifest/video.m3u8",
|
|
|
+ "errorMessage": "string",
|
|
|
+ "retryCount": 0,
|
|
|
+ "createdAt": "2024-01-15T10:30:00",
|
|
|
+ "startedAt": "2024-01-15T10:30:05",
|
|
|
+ "stoppedAt": "yyyy-MM-dd HH:mm:ss"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 获取机器推流任务列表
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/stream/tasks
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/stream/tasks
|
|
|
+
|
|
|
+描述:获取机器推流任务列表
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Query Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --------- | ------ | ---- | -------- | ------- | ----------- |
|
|
|
+| machineId | string | 是 | - | 机器 ID | machine_001 |
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | array | 否 | | 响应数据 (ActualType: List) | |
|
|
|
+| └ taskId | String | 否 | - | 任务 ID | task_abc123def456 |
|
|
|
+| └ machineId | String | 否 | - | 机器 ID | machine_001 |
|
|
|
+| └ cameraId | String | 否 | - | 摄像头 ID | hikvision_ptz |
|
|
|
+| └ cameraChannelId | String | 否 | - | 摄像头通道 ID | hik_main |
|
|
|
+| └ sourceRtspUrl | String | 否 | - | 源 RTSP 地址 | rtsp://admin:password@192.168.1.101:554/stream1 |
|
|
|
+| └ status | String | 否 | - | 推流状态: IDLE, STARTING, STREAMING, STOPPED, ERROR | STREAMING |
|
|
|
+| └ statusDescription | String | 否 | - | 状态描述 | 推流中 |
|
|
|
+| └ hlsPlaybackUrl | String | 否 | - | HLS 播放地址 | https://customer-xxx.cloudflarestream.com/xxx/manifest/video.m3u8 |
|
|
|
+| └ errorMessage | String | 否 | - | 错误信息 | |
|
|
|
+| └ retryCount | int | 否 | - | 重试次数 | 0 |
|
|
|
+| └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2024-01-15T10:30:00 |
|
|
|
+| └ startedAt | LocalDateTime | 否 | - | 开始推流时间 | 2024-01-15T10:30:05 |
|
|
|
+| └ stoppedAt | LocalDateTime | 否 | - | 停止推流时间 | yyyy-MM-dd HH:mm:ss |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": [
|
|
|
+ {
|
|
|
+ "taskId": "task_abc123def456",
|
|
|
+ "machineId": "machine_001",
|
|
|
+ "cameraId": "hikvision_ptz",
|
|
|
+ "cameraChannelId": "hik_main",
|
|
|
+ "sourceRtspUrl": "rtsp://admin:password@192.168.1.101:554/stream1",
|
|
|
+ "status": "STREAMING",
|
|
|
+ "statusDescription": "推流中",
|
|
|
+ "hlsPlaybackUrl": "https://customer-xxx.cloudflarestream.com/xxx/manifest/video.m3u8",
|
|
|
+ "errorMessage": "string",
|
|
|
+ "retryCount": 0,
|
|
|
+ "createdAt": "2024-01-15T10:30:00",
|
|
|
+ "startedAt": "2024-01-15T10:30:05",
|
|
|
+ "stoppedAt": "yyyy-MM-dd HH:mm:ss"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 获取所有活动任务
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/stream/tasks/active
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/stream/tasks/active
|
|
|
+
|
|
|
+描述:获取所有活动任务
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | array | 否 | | 响应数据 (ActualType: List) | |
|
|
|
+| └ taskId | String | 否 | - | 任务 ID | task_abc123def456 |
|
|
|
+| └ machineId | String | 否 | - | 机器 ID | machine_001 |
|
|
|
+| └ cameraId | String | 否 | - | 摄像头 ID | hikvision_ptz |
|
|
|
+| └ cameraChannelId | String | 否 | - | 摄像头通道 ID | hik_main |
|
|
|
+| └ sourceRtspUrl | String | 否 | - | 源 RTSP 地址 | rtsp://admin:password@192.168.1.101:554/stream1 |
|
|
|
+| └ status | String | 否 | - | 推流状态: IDLE, STARTING, STREAMING, STOPPED, ERROR | STREAMING |
|
|
|
+| └ statusDescription | String | 否 | - | 状态描述 | 推流中 |
|
|
|
+| └ hlsPlaybackUrl | String | 否 | - | HLS 播放地址 | https://customer-xxx.cloudflarestream.com/xxx/manifest/video.m3u8 |
|
|
|
+| └ errorMessage | String | 否 | - | 错误信息 | |
|
|
|
+| └ retryCount | int | 否 | - | 重试次数 | 0 |
|
|
|
+| └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2024-01-15T10:30:00 |
|
|
|
+| └ startedAt | LocalDateTime | 否 | - | 开始推流时间 | 2024-01-15T10:30:05 |
|
|
|
+| └ stoppedAt | LocalDateTime | 否 | - | 停止推流时间 | yyyy-MM-dd HH:mm:ss |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": [
|
|
|
+ {
|
|
|
+ "taskId": "task_abc123def456",
|
|
|
+ "machineId": "machine_001",
|
|
|
+ "cameraId": "hikvision_ptz",
|
|
|
+ "cameraChannelId": "hik_main",
|
|
|
+ "sourceRtspUrl": "rtsp://admin:password@192.168.1.101:554/stream1",
|
|
|
+ "status": "STREAMING",
|
|
|
+ "statusDescription": "推流中",
|
|
|
+ "hlsPlaybackUrl": "https://customer-xxx.cloudflarestream.com/xxx/manifest/video.m3u8",
|
|
|
+ "errorMessage": "string",
|
|
|
+ "retryCount": 0,
|
|
|
+ "createdAt": "2024-01-15T10:30:00",
|
|
|
+ "startedAt": "2024-01-15T10:30:05",
|
|
|
+ "stoppedAt": "yyyy-MM-dd HH:mm:ss"
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 获取推流通道列表
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/stream/channels
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/stream/channels
|
|
|
+
|
|
|
+描述:获取推流通道列表
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | array | 否 | | 响应数据 (ActualType: List) | |
|
|
|
+| └ channelId | String | 否 | - | 通道 ID | cf_channel_001 |
|
|
|
+| └ name | String | 否 | - | 通道名称 | 主推流通道 |
|
|
|
+| └ mode | String | 否 | - | 推流模式: WHIP, RTMPS | WHIP |
|
|
|
+| └ hlsPlaybackUrl | String | 否 | - | HLS 播放地址 | https://customer-xxx.cloudflarestream.com/xxx/manifest/video.m3u8 |
|
|
|
+| └ recordingEnabled | boolean | 否 | - | 是否启用录制 | false |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": [
|
|
|
+ {
|
|
|
+ "channelId": "cf_channel_001",
|
|
|
+ "name": "主推流通道",
|
|
|
+ "mode": "WHIP",
|
|
|
+ "hlsPlaybackUrl": "https://customer-xxx.cloudflarestream.com/xxx/manifest/video.m3u8",
|
|
|
+ "recordingEnabled": false
|
|
|
+ }
|
|
|
+ ]
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 切换推流源
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/stream/switch
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/stream/switch
|
|
|
+
|
|
|
+描述:切换推流源
|
|
|
+
|
|
|
+ContentType:`application/json`
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+##### Body Parameter
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ------------ | ------ | ---- | -------- | ----------------- | ----------------------------------------------- |
|
|
|
+| taskId | String | 是 | - | 任务 ID | task_abc123def456 |
|
|
|
+| newChannelId | String | 是 | - | 新的摄像头通道 ID | hik_main |
|
|
|
+| newRtspUrl | String | 是 | - | 新的 RTSP 地址 | rtsp://admin:password@192.168.1.101:554/stream1 |
|
|
|
+
|
|
|
+#### 请求示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "taskId": "task_abc123def456",
|
|
|
+ "newChannelId": "hik_main",
|
|
|
+ "newRtspUrl": "rtsp://admin:password@192.168.1.101:554/stream1"
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| --- | --- | --- | --- | --- | --- |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | | 响应数据 (ActualType: StreamTaskDTO) | |
|
|
|
+| └ taskId | String | 否 | - | 任务 ID | task_abc123def456 |
|
|
|
+| └ machineId | String | 否 | - | 机器 ID | machine_001 |
|
|
|
+| └ cameraId | String | 否 | - | 摄像头 ID | hikvision_ptz |
|
|
|
+| └ cameraChannelId | String | 否 | - | 摄像头通道 ID | hik_main |
|
|
|
+| └ sourceRtspUrl | String | 否 | - | 源 RTSP 地址 | rtsp://admin:password@192.168.1.101:554/stream1 |
|
|
|
+| └ status | String | 否 | - | 推流状态: IDLE, STARTING, STREAMING, STOPPED, ERROR | STREAMING |
|
|
|
+| └ statusDescription | String | 否 | - | 状态描述 | 推流中 |
|
|
|
+| └ hlsPlaybackUrl | String | 否 | - | HLS 播放地址 | https://customer-xxx.cloudflarestream.com/xxx/manifest/video.m3u8 |
|
|
|
+| └ errorMessage | String | 否 | - | 错误信息 | |
|
|
|
+| └ retryCount | int | 否 | - | 重试次数 | 0 |
|
|
|
+| └ createdAt | LocalDateTime | 否 | - | 创建时间 | 2024-01-15T10:30:00 |
|
|
|
+| └ startedAt | LocalDateTime | 否 | - | 开始推流时间 | 2024-01-15T10:30:05 |
|
|
|
+| └ stoppedAt | LocalDateTime | 否 | - | 停止推流时间 | yyyy-MM-dd HH:mm:ss |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {
|
|
|
+ "taskId": "task_abc123def456",
|
|
|
+ "machineId": "machine_001",
|
|
|
+ "cameraId": "hikvision_ptz",
|
|
|
+ "cameraChannelId": "hik_main",
|
|
|
+ "sourceRtspUrl": "rtsp://admin:password@192.168.1.101:554/stream1",
|
|
|
+ "status": "STREAMING",
|
|
|
+ "statusDescription": "推流中",
|
|
|
+ "hlsPlaybackUrl": "https://customer-xxx.cloudflarestream.com/xxx/manifest/video.m3u8",
|
|
|
+ "errorMessage": "string",
|
|
|
+ "retryCount": 0,
|
|
|
+ "createdAt": "2024-01-15T10:30:00",
|
|
|
+ "startedAt": "2024-01-15T10:30:05",
|
|
|
+ "stoppedAt": "yyyy-MM-dd HH:mm:ss"
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+## 房间控制 Controller
|
|
|
+
|
|
|
+房间播放 API 接口:
|
|
|
+
|
|
|
+- GET /room/{roomId}/play 获取播放信息(按需启动推流)
|
|
|
+- POST /room/{roomId}/stop 停止房间推流
|
|
|
+
|
|
|
+### 获取房间播放信息
|
|
|
+
|
|
|
+按需启动推流:
|
|
|
+
|
|
|
+- 检查 FFmpeg 是否在跑
|
|
|
+- 没跑则自动启动
|
|
|
+- 返回 WHEP URL (WebRTC 播放)
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `GET` http://localhost:10050/api/room/{roomId}/play
|
|
|
+- 开发环境: `GET` https://tg-live-game.pwtk.cc/api/room/{roomId}/play
|
|
|
+
|
|
|
+描述:获取房间播放信息
|
|
|
+
|
|
|
+按需启动推流:
|
|
|
+
|
|
|
+- 检查 FFmpeg 是否在跑
|
|
|
+- 没跑则自动启动
|
|
|
+- 返回 WHEP URL (WebRTC 播放)
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### Path 参数
|
|
|
+
|
|
|
+| 名称 | 必填 | 描述 | 示例值 |
|
|
|
+| ------ | ---- | ------- | ------ |
|
|
|
+| roomId | 是 | 房间 ID | |
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| -------------- | ------- | ---- | -------- | --------------------------------------- | ------ |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | | 响应数据 (ActualType: RoomPlayResponse) | |
|
|
|
+| └ roomId | String | 否 | - | 房间 ID | |
|
|
|
+| └ taskId | String | 否 | - | 推流任务 ID | |
|
|
|
+| └ whepUrl | String | 否 | - | WHEP 播放地址 (WebRTC) | |
|
|
|
+| └ status | String | 否 | - | 推流状态 | |
|
|
|
+| └ newlyStarted | boolean | 否 | - | 是否为新启动的推流 | true |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {
|
|
|
+ "roomId": "string",
|
|
|
+ "taskId": "string",
|
|
|
+ "whepUrl": "string",
|
|
|
+ "status": "string",
|
|
|
+ "newlyStarted": true
|
|
|
+ }
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|
|
|
+
|
|
|
+### 停止房间推流
|
|
|
+
|
|
|
+维护人:TG Live
|
|
|
+
|
|
|
+#### URL
|
|
|
+
|
|
|
+- 本地开发环境: `POST` http://localhost:10050/api/room/{roomId}/stop
|
|
|
+- 开发环境: `POST` https://tg-live-game.pwtk.cc/api/room/{roomId}/stop
|
|
|
+
|
|
|
+描述:停止房间推流
|
|
|
+
|
|
|
+ContentType:`application/x-www-form-urlencoded;charset=UTF-8`
|
|
|
+
|
|
|
+#### Path 参数
|
|
|
+
|
|
|
+| 名称 | 必填 | 描述 | 示例值 |
|
|
|
+| ------ | ---- | ------- | ------ |
|
|
|
+| roomId | 是 | 房间 ID | |
|
|
|
+
|
|
|
+#### 请求参数
|
|
|
+
|
|
|
+#### 响应参数
|
|
|
+
|
|
|
+| 名称 | 类型 | 必填 | 最大长度 | 描述 | 示例值 |
|
|
|
+| ---------- | ------- | ---- | -------- | --------------------------- | ------ |
|
|
|
+| success | Boolean | 否 | - | 请求是否成功 | true |
|
|
|
+| errCode | String | 否 | - | 错误码(失败时返回) | |
|
|
|
+| errMessage | String | 否 | - | 错误信息(失败时返回) | |
|
|
|
+| data | object | 否 | - | 响应数据 (ActualType: Void) | |
|
|
|
+
|
|
|
+#### 响应示例
|
|
|
+
|
|
|
+```
|
|
|
+{
|
|
|
+ "success": true,
|
|
|
+ "errCode": "string",
|
|
|
+ "errMessage": "string",
|
|
|
+ "data": {}
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### 错误码
|
|
|
+
|
|
|
+无
|