fuliqi
2024-10-10 d268f82d25c25ebdc7a1ea30614f6cda6d3a9ae3
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -766,48 +766,53 @@
    public synchronized String getFrameImgByDevice(String deviceId, String channelId, String workOrderNo) throws Exception {
        String url = String.format(this.rtspServer + "/api/play/start/%s/%s", deviceId, channelId);
        String result = HttpUtils.sendGet(url);
        log.error("拿到取流响应结果:" + result);
        log.info("拿到取流响应结果:" + result);
        WVPResult wvpResult = JSON.parseObject(result, WVPResult.class);
        String imgUrl = null;
        if (0 == wvpResult.getCode()) {
            log.error("请求成功");
        if (wvpResult.getCode() == 0) {
            JSONObject data = (JSONObject) wvpResult.getData();
            String rtspUrl = data.getString("rtsp"); // 取地址
            log.error("目标地址:" + rtspUrl);
            FFmpegFrameGrabber grabber = FFmpegFrameGrabber.createDefault(rtspUrl);
            String rtspUrl = data.getString("fmp4"); // 取mp4地址
            if (StringUtils.hasText(rtspUrl)) {
                System.out.println("目标地址:" + rtspUrl);
                FFmpegFrameGrabber grabber = null;
                try {
                    grabber.setOption("rtsp_transport", "tcp"); // 使用tcp的方式,不然会丢包很严重
                    grabber.setImageWidth(1920);
                    grabber.setImageHeight(1080);
                    grabber.setFrameRate(25);
                    grabber = new FFmpegFrameGrabber(rtspUrl);
//                    grabber.setOption("rtsp_transport", "tcp"); // 使用tcp的方式,不然会丢包很严重
//                    grabber.setVideoOption("probesize", "10000"); // 设置捕获分析的最大字节
                    grabber.start();
                    Frame frame = grabber.grabFrame();
                    Frame frame = grabber.grabImage(); // 直接捕获一帧
                    if (frame != null) {
                        //转换图像
                        Java2DFrameConverter converter = new Java2DFrameConverter();
                        BufferedImage srcImage = converter.getBufferedImage(frame);
                        if (srcImage != null) {
                            imgUrl = workOrderNo + "_" + IdUtils.fastSimpleUUID() + ".png";
                            // 生成图片路径
                            String imgPath = PlatformConfig.getProfile() + "/" + imgUrl;
                            System.out.println("图片保存地址:" + imgPath);
                            imgUrl = Constants.RESOURCE_PREFIX + "/" + imgUrl;
                            //创建文件
                            File file = new File(imgPath);
                            //输出文件
                            ImageIO.write(srcImage, "png", file);
                        }
                        System.out.println("成功捕获一帧");
                        // 将Frame转换为Mat
                        OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
                        Mat mat = converter.convertToMat(frame);
                        imgUrl = workOrderNo + "_" + IdUtils.fastSimpleUUID() + ".png";
                        // 生成图片路径
                        String imgPath = PlatformConfig.getProfile() + "/" + imgUrl;
                        System.out.println("图片保存地址:" + imgPath);
                        imgUrl = Constants.RESOURCE_PREFIX + "/" + imgUrl;
                        // 保存图片
                        opencv_imgcodecs.imwrite(imgPath, mat);
                    } else {
                        System.out.println("未捕获到帧");
                    }
                } catch (IOException e) {
                } catch (FrameGrabber.Exception e) {
                    e.printStackTrace();
                } finally {
                    grabber.stop(); // 停止捕获
                    grabber.close(); // 释放资源
                    if (grabber != null) {
                        try {
                            grabber.stop(); // 停止捕获
                        } catch (FrameGrabber.Exception e) {
                            e.printStackTrace();
                        }
                    }
                }
            }
        } else {
            System.out.println("请求失败,错误码:" + wvpResult.getCode() + "--" + wvpResult.getMsg());
        }
        System.out.println("图片URL:" + imgUrl);
        return imgUrl;
    }
@@ -819,7 +824,7 @@
        String imgUrl = null;
        if (wvpResult.getCode() == 0) {
            JSONObject data = (JSONObject) wvpResult.getData();
            String rtspUrl = data.getString("fmp4"); // 取mp4地址
            String rtspUrl = data.getString("rtsp"); // 取mp4地址
            if (StringUtils.hasText(rtspUrl)) {
                System.out.println("目标地址:" + rtspUrl);
                FFmpegFrameGrabber grabber = null;