From 5602c458099e38c6c4278334e5cb4f8029c63a50 Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期四, 10 十月 2024 20:16:22 +0800
Subject: [PATCH] 初始化

---
 src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java |   83 +++++++++++++++++++++++++++++++++++++++++
 1 files changed, 83 insertions(+), 0 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 780f536..32f827c 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
@@ -2,6 +2,7 @@
 
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import com.genersoft.iot.vmp.common.InviteSessionType;
 import com.genersoft.iot.vmp.common.StreamInfo;
 import com.genersoft.iot.vmp.conf.UserSetting;
@@ -20,6 +21,7 @@
 import com.genersoft.iot.vmp.service.bean.InviteErrorCode;
 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
 import com.genersoft.iot.vmp.utils.DateUtil;
+import com.genersoft.iot.vmp.utils.IdUtils;
 import com.genersoft.iot.vmp.vmanager.bean.AudioBroadcastResult;
 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
 import com.genersoft.iot.vmp.vmanager.bean.StreamContent;
@@ -28,16 +30,25 @@
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.security.SecurityRequirement;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import org.bytedeco.javacv.FFmpegFrameGrabber;
+import org.bytedeco.javacv.Frame;
+import org.bytedeco.javacv.FrameGrabber;
+import org.bytedeco.javacv.OpenCVFrameConverter;
+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.util.ObjectUtils;
+import org.springframework.util.StringUtils;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.context.request.async.DeferredResult;
 
 import javax.servlet.http.HttpServletRequest;
 import java.net.MalformedURLException;
 import java.net.URL;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.List;
 import java.util.UUID;
 
@@ -76,6 +87,8 @@
 
 	@Autowired
 	private UserSetting userSetting;
+
+	private final SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
 
 	@Operation(summary = "寮�濮嬬偣鎾�", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
@@ -149,6 +162,76 @@
 		return result;
 	}
 
+
+	@Operation(summary = "寮�濮嬬偣鎾苟杩斿洖鍥剧墖", security = @SecurityRequirement(name = JwtUtils.HEADER))
+	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
+	@Parameter(name = "channelId", description = "閫氶亾鍥芥爣缂栧彿", required = true)
+	@GetMapping("/start/img/{deviceId}/{channelId}")
+	public DeferredResult<WVPResult<String>> playReturnImg(HttpServletRequest request, @PathVariable String deviceId,
+														 @PathVariable String channelId) {
+
+		DeferredResult<WVPResult<StreamContent>> play = this.play(request, deviceId, channelId);
+		Object resultStr = play.getResult();
+		System.out.println("鑾峰彇缁撴灉锛�" + resultStr);
+		WVPResult wvpResult = (WVPResult) resultStr;
+		WVPResult<String> result = new WVPResult<>();
+		result.setData(this.getImg(wvpResult));
+		result.setCode(wvpResult.getCode());
+		result.setMsg(wvpResult.getMsg());
+		DeferredResult<WVPResult<String>> r = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
+		r.setResult(result);
+		return r;
+	}
+
+	private String getImg(WVPResult<StreamContent> wvpResult) {
+		String imgUrl = null;
+		if (wvpResult.getCode() == 0) {
+			String rtspUrl = wvpResult.getData().getFmp4(); // 鍙杕p4鍦板潃
+			if (StringUtils.hasText(rtspUrl)) {
+				System.out.println("鐩爣鍦板潃锛�" + rtspUrl);
+				FFmpegFrameGrabber grabber = null;
+				try {
+					grabber = new FFmpegFrameGrabber(rtspUrl);
+//                    grabber.setOption("rtsp_transport", "tcp"); // 浣跨敤tcp鐨勬柟寮忥紝涓嶇劧浼氫涪鍖呭緢涓ラ噸
+//                    grabber.setVideoOption("probesize", "10000"); // 璁剧疆鎹曡幏鍒嗘瀽鐨勬渶澶у瓧鑺�
+					grabber.start();
+					Frame frame = grabber.grabImage(); // 鐩存帴鎹曡幏涓�甯�
+					if (frame != null) {
+						System.out.println("鎴愬姛鎹曡幏涓�甯�");
+						// 灏咶rame杞崲涓篗at
+						OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();
+						Mat mat = converter.convertToMat(frame);
+
+						imgUrl = format.format(new Date()) + "_" + IdUtils.randomUUID() + ".png";
+						// 鐢熸垚鍥剧墖璺緞
+						String imgPath = "/home/zgyw/uploadPath/" + imgUrl;
+						System.out.println("鍥剧墖淇濆瓨鍦板潃锛�" + imgPath);
+						imgUrl = "/profile/" + imgUrl;
+						// 淇濆瓨鍥剧墖
+						opencv_imgcodecs.imwrite(imgPath, mat);
+					} else {
+						System.out.println("鏈崟鑾峰埌甯�");
+					}
+				} catch (FrameGrabber.Exception e) {
+					e.printStackTrace();
+				} finally {
+					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;
+	}
+
+
 	@Operation(summary = "鍋滄鐐规挱", security = @SecurityRequirement(name = JwtUtils.HEADER))
 	@Parameter(name = "deviceId", description = "璁惧鍥芥爣缂栧彿", required = true)
 	@Parameter(name = "channelId", description = "閫氶亾鍥芥爣缂栧彿", required = true)

--
Gitblit v1.8.0