From ab491a079ba4ab85ffef35d14c0767eba01455d8 Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期三, 15 一月 2025 09:18:36 +0800
Subject: [PATCH] 切正式服

---
 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java |  166 ++++++++++++++++++++++++++-----------------------------
 1 files changed, 79 insertions(+), 87 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
index c436e16..409042c 100755
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
@@ -36,22 +36,23 @@
 import okhttp3.OkHttpClient;
 import okhttp3.Request;
 import okhttp3.Response;
-import org.bytedeco.javacv.FFmpegFrameGrabber;
-import org.bytedeco.javacv.Frame;
-import org.bytedeco.javacv.FrameGrabber;
-import org.bytedeco.javacv.OpenCVFrameConverter;
+import org.bytedeco.javacv.*;
 import org.bytedeco.opencv.global.opencv_imgcodecs;
 import org.bytedeco.opencv.opencv_core.Mat;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.util.ObjectUtils;
 import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.context.request.async.DeferredResult;
 
+import javax.imageio.ImageIO;
 import javax.servlet.http.HttpServletRequest;
+import java.awt.image.BufferedImage;
 import java.io.BufferedReader;
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.net.*;
@@ -72,7 +73,8 @@
 public class PlayController {
 
     private final static Logger logger = LoggerFactory.getLogger(PlayController.class);
-
+    @Value("${platform.upload}")
+    public String upload;
     @Autowired
     private SIPCommander cmder;
     @Autowired
@@ -180,93 +182,72 @@
     public DeferredResult<WVPResult<String>> playReturnImg(HttpServletRequest request, @PathVariable String deviceId,
                                                            @PathVariable String channelId) throws IOException {
         logger.info("[寮�濮嬬偣鎾璢 deviceId锛歿}, channelId锛歿}, ", deviceId, channelId);
-        DeferredResult<WVPResult<String>> result = new DeferredResult<>(20 * 1000L);
-        //宸茬粡瀛樺湪娴�
-        InviteInfo inviteInfo = inviteStreamService.getInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, deviceId, channelId);
-        if (inviteInfo != null) {
-            logger.info("宸插瓨鍦ㄦ祦");
-            if (inviteInfo.getStreamInfo() != null) {
-                // 宸插瓨鍦ㄧ嚎鐩存帴鎴浘
-                MediaServer mediaServerItemInuse = mediaServerService.getOne(inviteInfo.getStreamInfo().getMediaServerId());
-                String streamUrl;
-                if (mediaServerItemInuse.getRtspPort() != 0) {
-                    streamUrl = String.format("rtsp://127.0.0.1:%s/%s/%s", mediaServerItemInuse.getRtspPort(), "rtp", inviteInfo.getStreamInfo().getStream());
-                } else {
-                    streamUrl = String.format("http://127.0.0.1:%s/%s/%s.live.mp4", mediaServerItemInuse.getHttpPort(), "rtp", inviteInfo.getStreamInfo().getStream());
-                }
-                WVPResult<String> wvpResult = new WVPResult<>();
-                String img = getImg(streamUrl);
-                wvpResult.setData(img);
+        // 鑾峰彇鍙敤鐨剒lm
+        Device device = storager.queryVideoDevice(deviceId);
+        MediaServer newMediaServerItem = playService.getNewMediaServerItem(device);
+        RequestMessage requestMessage = new RequestMessage();
+        String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId;
+        requestMessage.setKey(key);
+        String uuid = UUID.randomUUID().toString();
+        requestMessage.setId(uuid);
+
+        //瀛樻椿鏃堕棿
+        DeferredResult<WVPResult<String>> result = new DeferredResult<>(120 * 1000L);
+
+        //120绉掑瓨娲�
+        result.onTimeout(() -> {
+            logger.info("[鐐规挱绛夊緟瓒呮椂] deviceId锛歿}, channelId锛歿}, ", deviceId, channelId);
+            // 閲婃斁rtpserver
+            WVPResult<StreamInfo> wvpResult = new WVPResult<>();
+            wvpResult.setCode(ErrorCode.ERROR100.getCode());
+            wvpResult.setMsg("鐐规挱瓒呮椂");
+            requestMessage.setData(wvpResult);
+            resultHolder.invokeAllResult(requestMessage);
+            inviteStreamService.removeInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, deviceId, channelId);
+            storager.stopPlay(deviceId, channelId);
+        });
+
+        // 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ
+        resultHolder.put(key, uuid, result);
+
+        playService.play(newMediaServerItem, deviceId, channelId, null, (code, msg, data) -> {
+            WVPResult<String> wvpResult = new WVPResult<>();
+            if (code == InviteErrorCode.SUCCESS.getCode()) {
                 wvpResult.setCode(ErrorCode.SUCCESS.getCode());
                 wvpResult.setMsg(ErrorCode.SUCCESS.getMsg());
-                result.setResult(wvpResult);
-            }
-        } else {
-            logger.info("鏈瓨鍦ㄦ祦");
-            // 鑾峰彇鍙敤鐨剒lm
-            Device device = storager.queryVideoDevice(deviceId);
-            MediaServer newMediaServerItem = playService.getNewMediaServerItem(device);
 
-            RequestMessage requestMessage = new RequestMessage();
-            String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId;
-            requestMessage.setKey(key);
-            String uuid = UUID.randomUUID().toString();
-            requestMessage.setId(uuid);
-            //20绉掑瓨娲�
-            result.onTimeout(() -> {
-                logger.info("[鐐规挱绛夊緟瓒呮椂] deviceId锛歿}, channelId锛歿}, ", deviceId, channelId);
-                // 閲婃斁rtpserver
-                WVPResult<StreamInfo> wvpResult = new WVPResult<>();
-                wvpResult.setCode(ErrorCode.ERROR100.getCode());
-                wvpResult.setMsg("鐐规挱瓒呮椂");
-                requestMessage.setData(wvpResult);
-                resultHolder.invokeAllResult(requestMessage);
-                inviteStreamService.removeInviteInfoByDeviceAndChannel(InviteSessionType.PLAY, deviceId, channelId);
-                storager.stopPlay(deviceId, channelId);
-            });
-
-            // 褰曞儚鏌ヨ浠hannelId浣滀负deviceId鏌ヨ
-            resultHolder.put(key, uuid, result);
-
-            playService.play(newMediaServerItem, deviceId, channelId, null, (code, msg, data) -> {
-                WVPResult<String> wvpResult = new WVPResult<>();
-                if (code == InviteErrorCode.SUCCESS.getCode()) {
-                    wvpResult.setCode(ErrorCode.SUCCESS.getCode());
-                    wvpResult.setMsg(ErrorCode.SUCCESS.getMsg());
-
-                    if (data != null) {
-                        StreamInfo streamInfo = (StreamInfo) data;
-                        if (userSetting.getUseSourceIpAsStreamIp()) {
-                            streamInfo = streamInfo.clone();//娣辨嫹璐�
-                            String host;
-                            try {
-                                URL url = new URL(request.getRequestURL().toString());
-                                host = url.getHost();
-                            } catch (MalformedURLException e) {
-                                host = request.getLocalAddr();
-                            }
-                            streamInfo.channgeStreamIp(host);
+                if (data != null) {
+                    StreamInfo streamInfo = (StreamInfo) data;
+                    if (userSetting.getUseSourceIpAsStreamIp()) {
+                        streamInfo = streamInfo.clone();//娣辨嫹璐�
+                        String host;
+                        try {
+                            URL url = new URL(request.getRequestURL().toString());
+                            host = url.getHost();
+                        } catch (MalformedURLException e) {
+                            host = request.getLocalAddr();
                         }
-                        if (!ObjectUtils.isEmpty(newMediaServerItem.getTranscodeSuffix()) && !"null".equalsIgnoreCase(newMediaServerItem.getTranscodeSuffix())) {
-                            streamInfo.setStream(streamInfo.getStream() + "_" + newMediaServerItem.getTranscodeSuffix());
-                        }
-                        StreamContent streamContent = new StreamContent(streamInfo);
-                        String rtspUrl = streamContent.getFmp4(); // 鍙杕p4鍦板潃
-                        String img = getImg(rtspUrl);
-                        wvpResult.setData(img);
-                    } else {
-                        wvpResult.setCode(code);
-                        wvpResult.setMsg(msg);
+                        streamInfo.channgeStreamIp(host);
                     }
+                    if (!ObjectUtils.isEmpty(newMediaServerItem.getTranscodeSuffix()) && !"null".equalsIgnoreCase(newMediaServerItem.getTranscodeSuffix())) {
+                        streamInfo.setStream(streamInfo.getStream() + "_" + newMediaServerItem.getTranscodeSuffix());
+                    }
+                    StreamContent streamContent = new StreamContent(streamInfo);
+                    String rtspUrl = streamContent.getFmp4(); // 鍙杕p4鍦板潃
+                    String img = getImg(rtspUrl);
+                    wvpResult.setData(img);
                 } else {
                     wvpResult.setCode(code);
                     wvpResult.setMsg(msg);
                 }
-                requestMessage.setData(wvpResult);
-                // 姝ゅ蹇呴』閲婃斁鎵�鏈夎姹�
-                resultHolder.invokeAllResult(requestMessage);
-            });
-        }
+            } else {
+                wvpResult.setCode(code);
+                wvpResult.setMsg(msg);
+            }
+            requestMessage.setData(wvpResult);
+            // 姝ゅ蹇呴』閲婃斁鎵�鏈夎姹�
+            resultHolder.invokeAllResult(requestMessage);
+        });
         return result;
     }
 
@@ -277,10 +258,21 @@
             FFmpegFrameGrabber grabber = null;
             try {
                 grabber = new FFmpegFrameGrabber(rtspUrl);
-//                    grabber.setOption("rtsp_transport", "tcp"); // 浣跨敤tcp鐨勬柟寮忥紝涓嶇劧浼氫涪鍖呭緢涓ラ噸
-//                    grabber.setVideoOption("probesize", "10000"); // 璁剧疆鎹曡幏鍒嗘瀽鐨勬渶澶у瓧鑺�
-                grabber.start();
+//                grabber.setOption("rtsp_transport", "tcp"); // 浣跨敤tcp鐨勬柟寮忥紝涓嶇劧浼氫涪鍖呭緢涓ラ噸
+//                grabber.setVideoOption("probesize", "10000"); // 璁剧疆鎹曡幏鍒嗘瀽鐨勬渶澶у瓧鑺�
+//                grabber.setFrameRate(25);
+                grabber.startUnsafe();
                 Frame frame = grabber.grabImage(); // 鐩存帴鎹曡幏涓�甯�
+//                //杞崲鍥惧儚
+//                Java2DFrameConverter converter = new Java2DFrameConverter();
+//                BufferedImage srcImage = converter.getBufferedImage(frame);
+//                if (srcImage!=null) {
+//                    //鍒涘缓鏂囦欢
+//                    File file = new File(picPath);
+//                    //杈撳嚭鏂囦欢
+//                    ImageIO.write(srcImage, "png", file);
+//                }
+
                 if (frame != null) {
                     System.out.println("鎴愬姛鎹曡幏涓�甯�");
                     // 灏咶rame杞崲涓篗at
@@ -289,7 +281,7 @@
 
                     imgUrl = format.format(new Date()) + "_" + IdUtils.randomUUID() + ".png";
                     // 鐢熸垚鍥剧墖璺緞
-                    String imgPath = "/home/zgyw/uploadPath/" + imgUrl;
+                    String imgPath = upload + imgUrl;
                     System.out.println("鍥剧墖淇濆瓨鍦板潃锛�" + imgPath);
                     imgUrl = "/profile/" + imgUrl;
                     // 淇濆瓨鍥剧墖

--
Gitblit v1.8.0