From e48fa711a3664bece9b3e58840a75fe7c05bc47c Mon Sep 17 00:00:00 2001 From: panlinlin <648540858@qq.com> Date: 星期六, 08 五月 2021 17:14:05 +0800 Subject: [PATCH] 添加截图(快照)功能 --- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java | 63 +++++++++++++++++++++++-------- 1 files changed, 46 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java index 02fb742..63102b1 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java @@ -1,6 +1,8 @@ package com.genersoft.iot.vmp.media.zlm; +import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.genersoft.iot.vmp.conf.MediaConfig; import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; import com.genersoft.iot.vmp.gb28181.session.SsrcUtil; import org.slf4j.Logger; @@ -17,32 +19,55 @@ private Logger logger = LoggerFactory.getLogger("ZLMRTPServerFactory"); - @Value("${media.rtp.udpPortRange}") - private String udpPortRange; + @Autowired + private MediaConfig mediaConfig; @Autowired private ZLMRESTfulUtils zlmresTfulUtils; - private int[] udpPortRangeArray = new int[2]; + private int[] portRangeArray = new int[2]; private int currentPort = 0; + private Map<String, Integer> currentStreams = null; + public int createRTPServer(String streamId) { + if (currentStreams == null) { + currentStreams = new HashMap<>(); + JSONObject jsonObject = zlmresTfulUtils.listRtpServer(); + JSONArray data = jsonObject.getJSONArray("data"); + if (data != null) { + for (int i = 0; i < data.size(); i++) { + JSONObject dataItem = data.getJSONObject(i); + currentStreams.put(dataItem.getString("stream_id"), dataItem.getInteger("port")); + } + } + } + // 宸茬粡鍦ㄦ帹娴� + if (currentStreams.get(streamId) != null) { + Map<String, Object> closeRtpServerParam = new HashMap<>(); + closeRtpServerParam.put("stream_id", streamId); + zlmresTfulUtils.closeRtpServer(closeRtpServerParam); + currentStreams.remove(streamId); + } + Map<String, Object> param = new HashMap<>(); int result = -1; - int newPort = getPortFromUdpPortRange(); + int newPort = getPortFromportRange(); param.put("port", newPort); param.put("enable_tcp", 1); param.put("stream_id", streamId); JSONObject jsonObject = zlmresTfulUtils.openRtpServer(param); - System.out.println(jsonObject); if (jsonObject != null) { switch (jsonObject.getInteger("code")){ case 0: result= newPort; break; - case -300: // id宸茬粡瀛樺湪 + case -300: // id宸茬粡瀛樺湪, 鍙兘宸茬粡鍦ㄥ叾浠栫鍙f帹娴� + Map<String, Object> closeRtpServerParam = new HashMap<>(); + closeRtpServerParam.put("stream_id", streamId); + zlmresTfulUtils.closeRtpServer(closeRtpServerParam); result = newPort; break; case -400: // 绔彛鍗犵敤 @@ -77,16 +102,16 @@ return result; } - private int getPortFromUdpPortRange() { + private int getPortFromportRange() { if (currentPort == 0) { - String[] udpPortRangeStrArray = udpPortRange.split(","); - udpPortRangeArray[0] = Integer.parseInt(udpPortRangeStrArray[0]); - udpPortRangeArray[1] = Integer.parseInt(udpPortRangeStrArray[1]); + String[] portRangeStrArray = mediaConfig.getRtpPortRange().split(","); + portRangeArray[0] = Integer.parseInt(portRangeStrArray[0]); + portRangeArray[1] = Integer.parseInt(portRangeStrArray[1]); } - if (currentPort == 0 || currentPort++ > udpPortRangeArray[1]) { - currentPort = udpPortRangeArray[0]; - return udpPortRangeArray[0]; + if (currentPort == 0 || currentPort++ > portRangeArray[1]) { + currentPort = portRangeArray[0]; + return portRangeArray[0]; } else { if (currentPort % 2 == 1) { currentPort++; @@ -165,12 +190,12 @@ public Boolean startSendRtpStream(Map<String, Object>param) { Boolean result = false; JSONObject jsonObject = zlmresTfulUtils.startSendRtp(param); - System.out.println(jsonObject); + logger.info(jsonObject.toJSONString()); if (jsonObject == null) { logger.error("RTP鎺ㄦ祦澶辫触: 璇锋鏌LM鏈嶅姟"); } else if (jsonObject.getInteger("code") == 0) { result= true; - logger.error("RTP鎺ㄦ祦璇锋眰鎴愬姛锛屾湰鍦版帹娴佺鍙o細" + jsonObject.getString("local_port")); + logger.info("RTP鎺ㄦ祦璇锋眰鎴愬姛锛屾湰鍦版帹娴佺鍙o細" + jsonObject.getString("local_port")); } else { logger.error("RTP鎺ㄦ祦澶辫触: " + jsonObject.getString("msg")); } @@ -209,15 +234,19 @@ public Boolean stopSendRtpStream(Map<String, Object>param) { Boolean result = false; JSONObject jsonObject = zlmresTfulUtils.stopSendRtp(param); - System.out.println(jsonObject); + logger.info(jsonObject.toJSONString()); if (jsonObject == null) { logger.error("鍋滄RTP鎺ㄦ祦澶辫触: 璇锋鏌LM鏈嶅姟"); } else if (jsonObject.getInteger("code") == 0) { result= true; - logger.error("鍋滄RTP鎺ㄦ祦鎴愬姛"); + logger.info("鍋滄RTP鎺ㄦ祦鎴愬姛"); } else { logger.error("鍋滄RTP鎺ㄦ祦澶辫触: " + jsonObject.getString("msg")); } return result; } + + public void closeAllSendRtpStream() { + + } } -- Gitblit v1.8.0