| | |
| | | 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; |
| | |
| | | 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; |
| | |
| | | * @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); |
| | |
| | | if (mediaDescriptionIndex == 0 && ssrcIndex == 0) { |
| | | sdp = SdpFactory.getInstance().createSessionDescription(sdpStr); |
| | | }else { |
| | | int baseSdpIndex = Math.min(mediaDescriptionIndex, ssrcIndex); |
| | | //ssrc规定长度为10字节,不取余下长度以避免后续还有“f=”字段 |
| | | 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); |
| | | } |
| | |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public static String parseTime(String timeStr) { |
| | | if (ObjectUtils.isEmpty(timeStr)){ |
| | | return null; |
| | | } |
| | | System.out.println(timeStr); |
| | | 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.formatterISO8601); |
| | | } |
| | | } |