| | |
| | | package com.genersoft.iot.vmp.gb28181.transmit.cmd.impl;
|
| | |
|
| | | import com.alibaba.fastjson.JSONObject;
|
| | | import com.alibaba.fastjson2.JSONObject;
|
| | | import com.genersoft.iot.vmp.common.StreamInfo;
|
| | | import com.genersoft.iot.vmp.conf.DynamicTask;
|
| | | import com.genersoft.iot.vmp.conf.SipConfig;
|
| | | import com.genersoft.iot.vmp.conf.UserSetting;
|
| | | import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException;
|
| | |
| | | import com.genersoft.iot.vmp.gb28181.transmit.SIPSender;
|
| | | import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
|
| | | import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider;
|
| | | import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
|
| | | import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
|
| | | import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe;
|
| | | import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeFactory;
|
| | | import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeForStreamChange;
|
| | | import com.genersoft.iot.vmp.utils.DateUtil;
|
| | | import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
|
| | | import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe;
|
| | | import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
|
| | | import com.genersoft.iot.vmp.service.IMediaServerService;
|
| | | import com.genersoft.iot.vmp.service.bean.SSRCInfo;
|
| | | import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
|
| | | import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
|
| | | import com.genersoft.iot.vmp.utils.GitUtil;
|
| | | import gov.nist.javax.sip.SIPConstants;
|
| | | import gov.nist.javax.sip.SipProviderImpl;
|
| | | import gov.nist.javax.sip.SipStackImpl;
|
| | | import com.genersoft.iot.vmp.utils.DateUtil;
|
| | | import gov.nist.javax.sip.message.SIPRequest;
|
| | | import gov.nist.javax.sip.message.SIPResponse;
|
| | | import gov.nist.javax.sip.stack.SIPClientTransaction;
|
| | | import gov.nist.javax.sip.stack.SIPClientTransactionImpl;
|
| | | import gov.nist.javax.sip.stack.SIPDialog;
|
| | | import org.slf4j.Logger;
|
| | | import org.slf4j.LoggerFactory;
|
| | | import org.springframework.beans.factory.annotation.Autowired;
|
| | | import org.springframework.beans.factory.annotation.Qualifier;
|
| | | import org.springframework.context.annotation.DependsOn;
|
| | | import org.springframework.context.annotation.Lazy;
|
| | | import org.springframework.stereotype.Component;
|
| | | import org.springframework.util.ObjectUtils;
|
| | |
|
| | | import javax.sip.*;
|
| | | import javax.sip.address.Address;
|
| | | import javax.sip.address.SipURI;
|
| | | import javax.sip.header.*;
|
| | | import javax.sip.message.Message;
|
| | | import javax.sip.InvalidArgumentException;
|
| | | import javax.sip.ResponseEvent;
|
| | | import javax.sip.SipException;
|
| | | import javax.sip.SipFactory;
|
| | | import javax.sip.header.CallIdHeader;
|
| | | import javax.sip.message.Request;
|
| | | import javax.sip.message.Response;
|
| | | import java.lang.reflect.Field;
|
| | | import java.text.ParseException;
|
| | | import java.util.HashSet;
|
| | |
|
| | | /**
|
| | | * @description:设备能力接口,用于定义设备的控制、查询能力
|
| | |
| | | public void ptzCmd(Device device, String channelId, int leftRight, int upDown, int inOut, int moveSpeed,
|
| | | int zoomSpeed) throws InvalidArgumentException, SipException, ParseException {
|
| | | String cmdStr = SipUtils.cmdString(leftRight, upDown, inOut, moveSpeed, zoomSpeed);
|
| | | StringBuffer ptzXml = new StringBuffer(200);
|
| | | StringBuilder ptzXml = new StringBuilder(200);
|
| | | String charset = device.getCharset();
|
| | | ptzXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
|
| | | ptzXml.append("<Control>\r\n");
|
| | |
| | | subscribe.removeSubscribe(hookSubscribe);
|
| | | }
|
| | | });
|
| | | //
|
| | | String sdpIp;
|
| | | if (!ObjectUtils.isEmpty(device.getSdpIp())) {
|
| | | sdpIp = device.getSdpIp();
|
| | | }else {
|
| | | sdpIp = mediaServerItem.getSdpIp();
|
| | | }
|
| | | StringBuffer content = new StringBuffer(200);
|
| | | content.append("v=0\r\n");
|
| | | content.append("o=" + channelId + " 0 0 IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
|
| | | content.append("o=" + channelId + " 0 0 IN IP4 " + sdpIp + "\r\n");
|
| | | content.append("s=Play\r\n");
|
| | | content.append("c=IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
|
| | | content.append("c=IN IP4 " + sdpIp + "\r\n");
|
| | | content.append("t=0 0\r\n");
|
| | |
|
| | | if (userSetting.isSeniorSdp()) {
|
| | |
| | |
|
| | |
|
| | | logger.info("{} 分配的ZLM为: {} [{}:{}]", ssrcInfo.getStream(), mediaServerItem.getId(), mediaServerItem.getIp(), ssrcInfo.getPort());
|
| | |
|
| | | String sdpIp;
|
| | | if (!ObjectUtils.isEmpty(device.getSdpIp())) {
|
| | | sdpIp = device.getSdpIp();
|
| | | }else {
|
| | | sdpIp = mediaServerItem.getSdpIp();
|
| | | }
|
| | | StringBuffer content = new StringBuffer(200);
|
| | | content.append("v=0\r\n");
|
| | | content.append("o=" + channelId + " 0 0 IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
|
| | | content.append("o=" + channelId + " 0 0 IN IP4 " + sdpIp + "\r\n");
|
| | | content.append("s=Playback\r\n");
|
| | | content.append("u=" + channelId + ":0\r\n");
|
| | | content.append("c=IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
|
| | | content.append("c=IN IP4 " + sdpIp + "\r\n");
|
| | | content.append("t=" + DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(startTime) + " "
|
| | | + DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(endTime) + "\r\n");
|
| | |
|
| | |
| | | SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException {
|
| | |
|
| | | logger.info("{} 分配的ZLM为: {} [{}:{}]", ssrcInfo.getStream(), mediaServerItem.getId(), mediaServerItem.getIp(), ssrcInfo.getPort());
|
| | |
|
| | | String sdpIp;
|
| | | if (!ObjectUtils.isEmpty(device.getSdpIp())) {
|
| | | sdpIp = device.getSdpIp();
|
| | | }else {
|
| | | sdpIp = mediaServerItem.getSdpIp();
|
| | | }
|
| | | StringBuffer content = new StringBuffer(200);
|
| | | content.append("v=0\r\n");
|
| | | content.append("o=" + channelId + " 0 0 IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
|
| | | content.append("o=" + channelId + " 0 0 IN IP4 " + sdpIp + "\r\n");
|
| | | content.append("s=Download\r\n");
|
| | | content.append("u=" + channelId + ":0\r\n");
|
| | | content.append("c=IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
|
| | | content.append("c=IN IP4 " + sdpIp + "\r\n");
|
| | | content.append("t=" + DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(startTime) + " "
|
| | | + DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(endTime) + "\r\n");
|
| | |
|