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/gb28181/transmit/SIPProcessorFactory.java | 167 +++++++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 143 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java index b809696..dcfbf57 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java @@ -2,19 +2,33 @@ import javax.sip.RequestEvent; import javax.sip.ResponseEvent; +import javax.sip.SipProvider; import javax.sip.header.CSeqHeader; import javax.sip.message.Request; import javax.sip.message.Response; +import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform; +import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory; +import com.genersoft.iot.vmp.storager.IRedisCatchStorage; +import com.genersoft.iot.vmp.gb28181.transmit.response.impl.*; +import com.genersoft.iot.vmp.service.IPlayService; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; +import com.genersoft.iot.vmp.conf.SipConfig; +import com.genersoft.iot.vmp.gb28181.auth.RegisterLogicHandler; +import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; +import com.genersoft.iot.vmp.gb28181.event.EventPublisher; +import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; +import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.request.impl.AckRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.request.impl.ByeRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.request.impl.CancelRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.request.impl.InviteRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.request.impl.MessageRequestProcessor; +import com.genersoft.iot.vmp.gb28181.transmit.request.impl.NotifyRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.request.impl.OtherRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.request.impl.RegisterRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.request.impl.SubscribeRequestProcessor; @@ -23,38 +37,49 @@ import com.genersoft.iot.vmp.gb28181.transmit.response.impl.CancelResponseProcessor; import com.genersoft.iot.vmp.gb28181.transmit.response.impl.InviteResponseProcessor; import com.genersoft.iot.vmp.gb28181.transmit.response.impl.OtherResponseProcessor; +import com.genersoft.iot.vmp.storager.IVideoManagerStorager; +import com.genersoft.iot.vmp.utils.SpringBeanFactory; +import com.genersoft.iot.vmp.utils.redis.RedisUtil; /** - * @Description:TODO(杩欓噷鐢ㄤ竴鍙ヨ瘽鎻忚堪杩欎釜绫荤殑浣滅敤) - * @author: songww + * @Description: SIP淇′护澶勭悊鍒嗛厤 + * @author: swwheihei * @date: 2020骞�5鏈�3鏃� 涓嬪崍4:24:37 */ @Component public class SIPProcessorFactory { - @Autowired - private InviteRequestProcessor inviteRequestProcessor; + // private final static Logger logger = LoggerFactory.getLogger(SIPProcessorFactory.class); @Autowired - private RegisterRequestProcessor registerRequestProcessor; + private SipConfig sipConfig; @Autowired - private SubscribeRequestProcessor subscribeRequestProcessor; + private RegisterLogicHandler handler; @Autowired - private AckRequestProcessor ackRequestProcessor; + private IVideoManagerStorager storager; + + @Autowired + private IRedisCatchStorage redisCatchStorage; + + @Autowired + private EventPublisher publisher; @Autowired - private ByeRequestProcessor byeRequestProcessor; + private SIPCommander cmder; + + @Autowired + private SIPCommanderFroPlatform cmderFroPlatform; + + @Autowired + private RedisUtil redis; @Autowired - private CancelRequestProcessor cancelRequestProcessor; + private DeferredResultHolder deferredResultHolder; @Autowired - private MessageRequestProcessor messageRequestProcessor; - - @Autowired - private OtherRequestProcessor otherRequestProcessor; + private DeviceOffLineDetector offLineDetector; @Autowired private InviteResponseProcessor inviteResponseProcessor; @@ -64,35 +89,113 @@ @Autowired private CancelResponseProcessor cancelResponseProcessor; - + + @Autowired + @Lazy + private RegisterResponseProcessor registerResponseProcessor; + + @Autowired private OtherResponseProcessor otherResponseProcessor; - + + @Autowired + private IPlayService playService; + + @Autowired + private ZLMRTPServerFactory zlmrtpServerFactory; + + + // 娉細杩欓噷浣跨敤娉ㄨВ浼氬鑷村惊鐜緷璧栨敞鍏ワ紝鏆傜敤springBean + private SipProvider tcpSipProvider; + + // 娉細杩欓噷浣跨敤娉ㄨВ浼氬鑷村惊鐜緷璧栨敞鍏ワ紝鏆傜敤springBean + private SipProvider udpSipProvider; public ISIPRequestProcessor createRequestProcessor(RequestEvent evt) { Request request = evt.getRequest(); String method = request.getMethod(); - +// logger.info("鎺ユ敹鍒版秷鎭細"+request.getMethod()); +// sipSubscribe.getSubscribe(evt.getServerTransaction().getBranchId()).response(evt); if (Request.INVITE.equals(method)) { - return inviteRequestProcessor; + InviteRequestProcessor processor = new InviteRequestProcessor(); + processor.setRequestEvent(evt); + processor.setTcpSipProvider(getTcpSipProvider()); + processor.setUdpSipProvider(getUdpSipProvider()); + + processor.setCmder(cmder); + processor.setCmderFroPlatform(cmderFroPlatform); + processor.setPlayService(playService); + processor.setStorager(storager); + processor.setRedisCatchStorage(redisCatchStorage); + processor.setZlmrtpServerFactory(zlmrtpServerFactory); + return processor; } else if (Request.REGISTER.equals(method)) { - return registerRequestProcessor; + RegisterRequestProcessor processor = new RegisterRequestProcessor(); + processor.setRequestEvent(evt); + processor.setTcpSipProvider(getTcpSipProvider()); + processor.setUdpSipProvider(getUdpSipProvider()); + processor.setHandler(handler); + processor.setPublisher(publisher); + processor.setSipConfig(sipConfig); + processor.setVideoManagerStorager(storager); + return processor; } else if (Request.SUBSCRIBE.equals(method)) { - return subscribeRequestProcessor; + SubscribeRequestProcessor processor = new SubscribeRequestProcessor(); + processor.setRequestEvent(evt); + return processor; } else if (Request.ACK.equals(method)) { - return ackRequestProcessor; + AckRequestProcessor processor = new AckRequestProcessor(); + processor.setRequestEvent(evt); + processor.setRedisCatchStorage(redisCatchStorage); + processor.setZlmrtpServerFactory(zlmrtpServerFactory); + return processor; } else if (Request.BYE.equals(method)) { - return byeRequestProcessor; + ByeRequestProcessor processor = new ByeRequestProcessor(); + processor.setRequestEvent(evt); + processor.setRedisCatchStorage(redisCatchStorage); + processor.setZlmrtpServerFactory(zlmrtpServerFactory); + processor.setSIPCommander(cmder); + return processor; } else if (Request.CANCEL.equals(method)) { - return cancelRequestProcessor; + CancelRequestProcessor processor = new CancelRequestProcessor(); + processor.setRequestEvent(evt); + return processor; } else if (Request.MESSAGE.equals(method)) { - return messageRequestProcessor; + MessageRequestProcessor processor = new MessageRequestProcessor(); + processor.setRequestEvent(evt); + processor.setTcpSipProvider(getTcpSipProvider()); + processor.setUdpSipProvider(getUdpSipProvider()); + processor.setPublisher(publisher); + processor.setRedis(redis); + processor.setDeferredResultHolder(deferredResultHolder); + processor.setOffLineDetector(offLineDetector); + processor.setCmder(cmder); + processor.setCmderFroPlatform(cmderFroPlatform); + processor.setStorager(storager); + processor.setRedisCatchStorage(redisCatchStorage); + return processor; + } else if (Request.NOTIFY.equalsIgnoreCase(method)) { + NotifyRequestProcessor processor = new NotifyRequestProcessor(); + processor.setRequestEvent(evt); + processor.setTcpSipProvider(getTcpSipProvider()); + processor.setUdpSipProvider(getUdpSipProvider()); + processor.setPublisher(publisher); + processor.setRedis(redis); + processor.setDeferredResultHolder(deferredResultHolder); + processor.setOffLineDetector(offLineDetector); + processor.setCmder(cmder); + processor.setStorager(storager); + processor.setRedisCatchStorage(redisCatchStorage); + return processor; } else { - return otherRequestProcessor; + OtherRequestProcessor processor = new OtherRequestProcessor(); + processor.setRequestEvent(evt); + return processor; } } public ISIPResponseProcessor createResponseProcessor(ResponseEvent evt) { + Response response = evt.getResponse(); CSeqHeader cseqHeader = (CSeqHeader) response.getHeader(CSeqHeader.NAME); String method = cseqHeader.getMethod(); @@ -102,9 +205,25 @@ return byeResponseProcessor; } else if (Request.CANCEL.equals(method)) { return cancelResponseProcessor; + }else if (Request.REGISTER.equals(method)) { + return registerResponseProcessor; } else { return otherResponseProcessor; } } + private SipProvider getTcpSipProvider() { + if (tcpSipProvider == null) { + tcpSipProvider = (SipProvider) SpringBeanFactory.getBean("tcpSipProvider"); + } + return tcpSipProvider; + } + + private SipProvider getUdpSipProvider() { + if (udpSipProvider == null) { + udpSipProvider = (SipProvider) SpringBeanFactory.getBean("udpSipProvider"); + } + return udpSipProvider; + } + } -- Gitblit v1.8.0