From 4a4692342a4ba22283d5e580d15b645f3be65da0 Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期三, 21 八月 2024 15:03:40 +0800 Subject: [PATCH] 对接wvp获取rtsp视频流取图片定时任务 --- ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 68 ++++++++++++++++++++++++++++++++++ 1 files changed, 68 insertions(+), 0 deletions(-) diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java index 66e3094..ddf6987 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java @@ -1,14 +1,18 @@ package com.ycl.platform.service.impl; +import com.alibaba.fastjson2.JSON; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ycl.config.PlatformConfig; +import com.ycl.config.ServerConfig; import com.ycl.exception.ServiceException; import com.ycl.platform.domain.entity.*; import com.ycl.platform.domain.form.*; import com.ycl.platform.domain.query.*; +import com.ycl.platform.domain.vo.DeviceInfoVO; import com.ycl.platform.domain.vo.DistributeWorkOrderVO; import com.ycl.platform.domain.vo.WorkOrderVO; import com.ycl.platform.domain.vo.WorkOrderYwConditionRecordVO; @@ -20,6 +24,8 @@ import com.ycl.platform.service.WorkOrderAuditingRecordService; import com.ycl.platform.service.WorkOrderService; import com.ycl.platform.service.YwPointService; +import com.ycl.platform.wvp.StreamContent; +import com.ycl.platform.wvp.WVPResult; import com.ycl.system.Result; import com.ycl.system.domain.SysConfig; import com.ycl.system.mapper.SysConfigMapper; @@ -27,20 +33,29 @@ import com.ycl.system.page.PageUtil; import com.ycl.utils.DateUtils; import com.ycl.utils.SecurityUtils; +import com.ycl.utils.http.HttpUtils; import com.ycl.utils.redis.RedisCache; import com.ycl.utils.uuid.IdUtils; import enumeration.general.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.ObjectUtils; +import org.bytedeco.javacv.FFmpegFrameGrabber; +import org.bytedeco.javacv.Frame; +import org.bytedeco.javacv.Java2DFrameConverter; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.Assert; import org.springframework.util.CollectionUtils; import org.springframework.util.StringUtils; +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.*; @@ -66,6 +81,10 @@ private final WorkOrderDistributeRecordMapper workOrderDistributeRecordMapper; private final TMonitorMapper monitorMapper; private final SysConfigMapper configMapper; + private final ServerConfig serverConfig; + + @Value("${rtsp.server:http://127.0.0.1:7788}") + private String rtspServer; private final String DISTRIBUTE_LOCK_KEY = "distributeLock"; private final static String IMPORTANT = "important"; @@ -557,4 +576,53 @@ public List<WorkOrderRegionVO> workOrderRegion(DashboardQuery dashboardQuery) { return baseMapper.workOrderRegion(dashboardQuery); } + + + @Override + public String getFrameImgByDevice(String deviceId, String channelId) { + String url = String.format(this.rtspServer + "/start/%s/%s", deviceId, channelId); + String result = HttpUtils.sendGet(url); + WVPResult wvpResult = JSON.parseObject(result, WVPResult.class); + if (0 == wvpResult.getCode()) { + StreamContent data = (StreamContent) wvpResult.getData(); + String rtspUrl = data.getRtsp(); + if (StringUtils.hasText(rtspUrl)) { + try { + // 鍒涘缓FFmpegFrameGrabber瀵硅薄 + FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(rtspUrl); + grabber.start(); // 寮�濮嬫崟鑾� + + Frame frame; + if ((frame = grabber.grabFrame()) != null) { + // 灏嗗抚杞崲涓哄浘鐗� + Java2DFrameConverter converter = new Java2DFrameConverter(); + BufferedImage image = converter.convert(frame); + File outputfile = new File(serverConfig.getUrl() + PlatformConfig.getUploadPath() + deviceId + IdUtils.fastSimpleUUID() + ".png"); + ImageIO.write(image, "png", outputfile); + String imgPath = outputfile.getAbsolutePath(); + System.out.println("Saved " + imgPath); + return imgPath; + } + grabber.stop(); // 鍋滄鎹曡幏 + grabber.release(); // 閲婃斁璧勬簮 + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return null; + } + + @Override + public List<DeviceInfoVO> hasErrorWorkOrderList() { + List<DeviceInfoVO> list = baseMapper.hasErrorWorkOrderList(); + return list; + } + + @Override + public void updateImgById(Integer workOrderId, String imgPath) { + new LambdaUpdateChainWrapper<>(baseMapper) + .eq(WorkOrder::getId, workOrderId) + .set(WorkOrder::getYwCheckCondition, imgPath); + } } -- Gitblit v1.8.0