diff --git a/klp-admin/src/main/resources/application.yml b/klp-admin/src/main/resources/application.yml index bb9b0595..c4ea4a25 100644 --- a/klp-admin/src/main/resources/application.yml +++ b/klp-admin/src/main/resources/application.yml @@ -335,3 +335,4 @@ sales: camera: media-server-host: http://47.117.71.33:15218 # ZLMediaKit 控制台地址 + api-secret: kuQV244gFXu7fBev9UBFkm0IrslUC2A9 # 必须与ZLMediaKit的config.ini一致 diff --git a/klp-common/src/main/java/com/klp/common/config/CameraConfig.java b/klp-common/src/main/java/com/klp/common/config/CameraConfig.java index ed8d3af2..38d7c4ab 100644 --- a/klp-common/src/main/java/com/klp/common/config/CameraConfig.java +++ b/klp-common/src/main/java/com/klp/common/config/CameraConfig.java @@ -9,4 +9,5 @@ import org.springframework.stereotype.Component; @Data public class CameraConfig { private String mediaServerHost; + private String apiSecret; } diff --git a/klp-wms/pom.xml b/klp-wms/pom.xml index 00773272..0894fdc5 100644 --- a/klp-wms/pom.xml +++ b/klp-wms/pom.xml @@ -35,5 +35,11 @@ 2.0.29 + + com.alibaba + fastjson + 1.2.83 + + diff --git a/klp-wms/src/main/java/com/klp/controller/WmsCameraManagementController.java b/klp-wms/src/main/java/com/klp/controller/WmsCameraManagementController.java index 2a1d6378..f2060f8f 100644 --- a/klp-wms/src/main/java/com/klp/controller/WmsCameraManagementController.java +++ b/klp-wms/src/main/java/com/klp/controller/WmsCameraManagementController.java @@ -1,12 +1,15 @@ package com.klp.controller; +import java.net.URLEncoder; import java.util.List; import java.util.Arrays; +import com.alibaba.fastjson.JSON; +import com.klp.common.utils.StringUtils; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; -import cn.dev33.satoken.annotation.SaCheckPermission; + import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import com.klp.common.annotation.RepeatSubmit; @@ -23,6 +26,7 @@ import com.klp.domain.bo.WmsCameraManagementBo; import com.klp.service.IWmsCameraManagementService; import com.klp.common.core.page.TableDataInfo; import com.klp.common.config.CameraConfig; +import org.springframework.web.client.RestTemplate; /** * 摄像头管理 @@ -69,20 +73,39 @@ public class WmsCameraManagementController extends BaseController { } /** - * 获取摄像头FLV流地址(前端可用flv.js播放) + * 获取 FLV地址并自动拉流 */ @GetMapping("/stream/{cameraId}") public R getCameraStream(@PathVariable Long cameraId) { + // 1. 查询摄像头RTSP地址 WmsCameraManagementVo camera = iWmsCameraManagementService.queryById(cameraId); - if (camera == null) { - return R.fail("摄像头不存在"); + if (camera == null || StringUtils.isBlank(camera.getRtspUrl())) { + return R.fail("摄像头配置错误"); + } + + // 2. 生成FLV播放地址 + String flvUrl = String.format("%s/live/%s.flv", + cameraConfig.getMediaServerHost(), + camera.getCameraCode()); + + // 3. 调用ZLMediaKit拉流 + String apiUrl = String.format("%s/index/api/addStreamProxy?&vhost=__defaultVhost__&app=live&stream=%s&url=%s&secret=%s", + cameraConfig.getMediaServerHost(), + camera.getCameraCode(), + camera.getRtspUrl(), + cameraConfig.getApiSecret()); + System.out.println("拉流API地址: " + apiUrl); + + try { + String result = new RestTemplate().getForObject(apiUrl, String.class); + if (!JSON.parseObject(result).getInteger("code").equals(0)) { + return R.fail("拉流失败: " + JSON.parseObject(result).getString("msg")); + } + camera.setHttpFmp4(flvUrl); + return R.ok(camera); + } catch (Exception e) { + return R.fail("API调用失败: " + e.getMessage()); } - // 组装ZLMediaKit的FLV播放地址 - String app = "live"; - String stream = camera.getCameraCode(); - String flvUrl = cameraConfig.getMediaServerHost() + "/" + app + "/" + stream + ".flv"; - camera.setHttpFmp4(flvUrl); // 复用已有字段存flvUrl,前端用httpFmp4字段接收 - return R.ok(camera); } /**