From d9cfe061b9b501511f5d769f751c8ff6bbcb1bf9 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期四, 17 八月 2023 15:20:25 +0800 Subject: [PATCH] 优化对讲释放流程 --- src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java | 61 +++++++++++++++++++++++++----- 1 files changed, 51 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java index 29f1654..c646058 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java @@ -3,12 +3,15 @@ import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.Gb28181Sdp; import com.genersoft.iot.vmp.gb28181.bean.RemoteAddressInfo; +import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.utils.GitUtil; import gov.nist.javax.sip.address.AddressImpl; import gov.nist.javax.sip.address.SipUri; import gov.nist.javax.sip.header.Subject; import gov.nist.javax.sip.message.SIPRequest; import org.apache.commons.lang3.RandomStringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.util.ObjectUtils; import javax.sdp.SdpFactory; @@ -21,6 +24,8 @@ import javax.sip.header.UserAgentHeader; import javax.sip.message.Request; import java.text.ParseException; +import java.time.LocalDateTime; +import java.time.format.DateTimeParseException; import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -32,6 +37,8 @@ * @createTime 2021骞�09鏈�27鏃� 15:12:00 */ public class SipUtils { + + private final static Logger logger = LoggerFactory.getLogger(SipUtils.class); public static String getUserIdFromFromHeader(Request request) { FromHeader fromHeader = (FromHeader)request.getHeader(FromHeader.NAME); @@ -118,7 +125,7 @@ strTmp = String.format("%02X", moveSpeed); builder.append(strTmp, 0, 2); builder.append(strTmp, 0, 2); - + //浼樺寲zoom浣庡�嶉�熶笅鐨勫彉鍊嶉�熺巼 if ((zoomSpeed > 0) && (zoomSpeed <16)) { @@ -133,6 +140,26 @@ return builder.toString(); } + public static String getNewCallId() { + return (int) Math.floor(Math.random() * 1000000000) + ""; + } + + public static int getTypeCodeFromGbCode(String deviceId) { + if (ObjectUtils.isEmpty(deviceId)) { + return 0; + } + return Integer.parseInt(deviceId.substring(10, 13)); + } + + /** + * 鍒ゆ柇鏄惁鏄墠绔鍥磋澶� + * @param deviceId + * @return + */ + public static boolean isFrontEnd(String deviceId) { + int typeCodeFromGbCode = getTypeCodeFromGbCode(deviceId); + return typeCodeFromGbCode > 130 && typeCodeFromGbCode < 199; + } /** * 浠庤姹備腑鑾峰彇璁惧ip鍦板潃鍜岀鍙e彿 * @param request 璇锋眰 @@ -207,22 +234,18 @@ if (mediaDescriptionIndex == 0 && ssrcIndex == 0) { sdp = SdpFactory.getInstance().createSessionDescription(sdpStr); }else { - int baseSdpIndex = Math.min(mediaDescriptionIndex, ssrcIndex); - //ssrc瑙勫畾闀垮害涓�10瀛楄妭锛屼笉鍙栦綑涓嬮暱搴︿互閬垮厤鍚庣画杩樻湁鈥渇=鈥濆瓧娈� - String substring = sdpStr.substring(0, baseSdpIndex); - sdp = SdpFactory.getInstance().createSessionDescription(substring); - String lines[] = sdpStr.split("\\r?\\n"); + StringBuilder sdpBuffer = new StringBuilder(); for (String line : lines) { if (line.trim().startsWith("y=")) { ssrc = line.substring(2); }else if (line.trim().startsWith("f=")) { mediaDescription = line.substring(2); - } - if (ssrc != null && mediaDescription != null) { - break; + }else { + sdpBuffer.append(line.trim()).append("\r\n"); } } + sdp = SdpFactory.getInstance().createSessionDescription(sdpBuffer.toString()); } return Gb28181Sdp.getInstance(sdp, ssrc, mediaDescription); } @@ -242,4 +265,22 @@ } return null; } -} + + public static String parseTime(String timeStr) { + if (ObjectUtils.isEmpty(timeStr)){ + return null; + } + LocalDateTime localDateTime; + try { + localDateTime = LocalDateTime.parse(timeStr); + }catch (DateTimeParseException e) { + try { + localDateTime = LocalDateTime.parse(timeStr, DateUtil.formatterISO8601); + }catch (DateTimeParseException e2) { + logger.error("[鏍煎紡鍖栨椂闂碷 鏃犳硶鏍煎紡鍖栨椂闂达細 {}", timeStr); + return null; + } + } + return localDateTime.format(DateUtil.formatter); + } +} \ No newline at end of file -- Gitblit v1.8.0