feat(aiot): snap接口改用cameraCode参数查询StreamProxy
- 修改 AiRoiController.getSnap 方法参数从 app/stream 改为 cameraCode - 注入 IStreamProxyService 服务 - 通过 streamProxyService.getStreamProxyByCameraCode() 查询 StreamProxy - 从 StreamProxy 对象获取 app 和 stream 字段 - 增加参数校验,未找到对应代理时返回 404 - 更新日志输出包含 cameraCode 信息 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -6,6 +6,8 @@ import com.genersoft.iot.vmp.aiot.bean.AiRoiDetail;
|
|||||||
import com.genersoft.iot.vmp.aiot.service.IAiRoiService;
|
import com.genersoft.iot.vmp.aiot.service.IAiRoiService;
|
||||||
import com.genersoft.iot.vmp.media.bean.MediaServer;
|
import com.genersoft.iot.vmp.media.bean.MediaServer;
|
||||||
import com.genersoft.iot.vmp.media.service.IMediaServerService;
|
import com.genersoft.iot.vmp.media.service.IMediaServerService;
|
||||||
|
import com.genersoft.iot.vmp.streamProxy.bean.StreamProxy;
|
||||||
|
import com.genersoft.iot.vmp.streamProxy.service.IStreamProxyService;
|
||||||
import com.github.pagehelper.PageInfo;
|
import com.github.pagehelper.PageInfo;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.Parameter;
|
||||||
@@ -35,6 +37,9 @@ public class AiRoiController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IMediaServerService mediaServerService;
|
private IMediaServerService mediaServerService;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private IStreamProxyService streamProxyService;
|
||||||
|
|
||||||
@Operation(summary = "分页查询ROI列表")
|
@Operation(summary = "分页查询ROI列表")
|
||||||
@GetMapping("/list")
|
@GetMapping("/list")
|
||||||
public PageInfo<AiRoi> queryList(
|
public PageInfo<AiRoi> queryList(
|
||||||
@@ -91,8 +96,20 @@ public class AiRoiController {
|
|||||||
@Operation(summary = "获取摄像头截图")
|
@Operation(summary = "获取摄像头截图")
|
||||||
@GetMapping("/snap")
|
@GetMapping("/snap")
|
||||||
public void getSnap(HttpServletResponse resp,
|
public void getSnap(HttpServletResponse resp,
|
||||||
@RequestParam String app,
|
@RequestParam String cameraCode) {
|
||||||
@RequestParam String stream) {
|
// 通过 camera_code 查询 StreamProxy
|
||||||
|
StreamProxy proxy = streamProxyService.getStreamProxyByCameraCode(cameraCode);
|
||||||
|
|
||||||
|
if (proxy == null) {
|
||||||
|
log.warn("[AI截图] 未找到camera_code对应的StreamProxy: {}", cameraCode);
|
||||||
|
resp.setStatus(HttpServletResponse.SC_NOT_FOUND);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 使用 proxy 的 app 和 stream
|
||||||
|
String app = proxy.getApp();
|
||||||
|
String stream = proxy.getStream();
|
||||||
|
|
||||||
MediaServer mediaServer = mediaServerService.getDefaultMediaServer();
|
MediaServer mediaServer = mediaServerService.getDefaultMediaServer();
|
||||||
if (mediaServer == null) {
|
if (mediaServer == null) {
|
||||||
log.warn("[AI截图] 无可用媒体服务器");
|
log.warn("[AI截图] 无可用媒体服务器");
|
||||||
@@ -106,7 +123,7 @@ public class AiRoiController {
|
|||||||
} else {
|
} else {
|
||||||
internalUrl = String.format("http://127.0.0.1:%s/%s/%s.live.mp4", mediaServer.getHttpPort(), app, stream);
|
internalUrl = String.format("http://127.0.0.1:%s/%s/%s.live.mp4", mediaServer.getHttpPort(), app, stream);
|
||||||
}
|
}
|
||||||
log.info("[AI截图] app={}, stream={}, 内部地址={}", app, stream, internalUrl);
|
log.info("[AI截图] cameraCode={}, app={}, stream={}, 内部地址={}", cameraCode, app, stream, internalUrl);
|
||||||
|
|
||||||
String zlmApi = String.format("http://%s:%s/index/api/getSnap",
|
String zlmApi = String.format("http://%s:%s/index/api/getSnap",
|
||||||
mediaServer.getIp(), mediaServer.getHttpPort());
|
mediaServer.getIp(), mediaServer.getHttpPort());
|
||||||
|
|||||||
Reference in New Issue
Block a user