src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/resources/application.yml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
wikis/images/核心流程.png | 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
@@ -59,10 +59,10 @@ @PostConstruct private void initSipServer() { Thread thread=new Thread(this); thread.setDaemon(true); thread.setName("sip server thread start"); thread.start(); Thread thread = new Thread(this); thread.setDaemon(true); thread.setName("sip server thread start"); thread.start(); } @Override @@ -84,7 +84,7 @@ * 0; public static final int TRACE_MESSAGES = 16; public static final int * TRACE_EXCEPTION = 17; public static final int TRACE_DEBUG = 32; */ properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "0"); properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "32"); properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "sip_server_log"); properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "sip_debug_log"); sipStack = (SipStackImpl) sipFactory.createSipStack(properties); @@ -99,13 +99,15 @@ } private void startTcpListener() throws Exception { ListeningPoint tcpListeningPoint = sipStack.createListeningPoint(sipConfig.getSipIp(), sipConfig.getSipPort(), "TCP"); ListeningPoint tcpListeningPoint = sipStack.createListeningPoint(sipConfig.getSipIp(), sipConfig.getSipPort(), "TCP"); tcpSipProvider = sipStack.createSipProvider(tcpListeningPoint); tcpSipProvider.addSipListener(this); } private void startUdpListener() throws Exception { ListeningPoint udpListeningPoint = sipStack.createListeningPoint(sipConfig.getSipIp(), sipConfig.getSipPort(), "UDP"); ListeningPoint udpListeningPoint = sipStack.createListeningPoint(sipConfig.getSipIp(), sipConfig.getSipPort(), "UDP"); udpSipProvider = sipStack.createSipProvider(udpListeningPoint); udpSipProvider.addSipListener(this); } @@ -127,13 +129,15 @@ if ((status >= 200) && (status < 300)) { // Success! ISIPResponseProcessor processor = processorFactory.createResponseProcessor(evt); processor.process(evt, this, sipConfig); } else if (status == Response.TRYING) { // tryingä¸ä¼åå¤ } else { logger.warn("æ¥æ¶å°å¤±è´¥çresponseååºï¼statusï¼" + status + ",message:" + response.getContent().toString()); } // tryingä¸ä¼åå¤ if (status == Response.TRYING) { // if (status == Response.TRYING) { } // } } /** src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -94,6 +94,49 @@ return ptzCmd(device, channelId, 0, 0, inOut, 0, zoomSpeed); } /** * äºå°æä»¤ç è®¡ç® * * @param leftRight é头左移å³ç§» 0:忢 1:左移 2:å³ç§» * @param upDown é头ä¸ç§»ä¸ç§» 0:忢 1:ä¸ç§» 2:ä¸ç§» * @param inOut é头æ¾å¤§ç¼©å° 0:忢 1:ç¼©å° 2:æ¾å¤§ * @param moveSpeed é头移å¨é度 é»è®¤ 0XFF (0-255) * @param zoomSpeed é头缩æ¾é度 é»è®¤ 0X1 (0-255) */ public static String cmdString(int leftRight, int upDown, int inOut, int moveSpeed, int zoomSpeed) { int cmdCode = 0; if (leftRight == 2) { cmdCode|=0x01; // å³ç§» } else if(leftRight == 1) { cmdCode|=0x02; // 左移 } if (upDown == 2) { cmdCode|=0x04; // ä¸ç§» } else if(upDown == 1) { cmdCode|=0x08; // ä¸ç§» } if (inOut == 2) { cmdCode |= 0x10; // æ¾å¤§ } else if(inOut == 1) { cmdCode |= 0x20; // ç¼©å° } StringBuilder builder = new StringBuilder("A50F01"); String strTmp; strTmp = String.format("%02X", cmdCode); builder.append(strTmp, 0, 2); strTmp = String.format("%02X", moveSpeed); builder.append(strTmp, 0, 2); builder.append(strTmp, 0, 2); strTmp = String.format("%X", zoomSpeed); builder.append(strTmp, 0, 1).append("0"); //è®¡ç®æ ¡éªç int checkCode = (0XA5 + 0X0F + 0X01 + cmdCode + moveSpeed + moveSpeed + (zoomSpeed /*<< 4*/ & 0XF0)) % 0X100; strTmp = String.format("%02X", checkCode); builder.append(strTmp, 0, 2); return builder.toString(); } /** * äºå°æ§å¶ï¼æ¯ææ¹åä¸ç¼©æ¾æ§å¶ * @@ -109,13 +152,14 @@ public boolean ptzCmd(Device device, String channelId, int leftRight, int upDown, int inOut, int moveSpeed, int zoomSpeed) { try { String cmdStr= cmdString(leftRight, upDown, inOut, moveSpeed, zoomSpeed); StringBuffer ptzXml = new StringBuffer(200); ptzXml.append("<?xml version=\"1.0\" ?>"); ptzXml.append("<Control>"); ptzXml.append("<CmdType>DeviceControl</CmdType>"); ptzXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>"); ptzXml.append("<DeviceID>" + channelId + "</DeviceID>"); ptzXml.append("<PTZCmd>" + "</PTZCmd>"); ptzXml.append("<PTZCmd>" + cmdStr + "</PTZCmd>"); ptzXml.append("<Info>"); ptzXml.append("</Info>"); ptzXml.append("</Control>"); @@ -123,7 +167,6 @@ Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtzTag", "ToPtzTag"); transmitRequest(device, request); return true; } catch (SipException | ParseException | InvalidArgumentException e) { e.printStackTrace(); src/main/resources/application.yml
@@ -26,7 +26,8 @@ server: port: 8080 sip: ip: 10.200.64.63 # ip: 10.200.64.63 ip: 192.168.0.102 port: 5060 # æ ¹æ®å½æ 6.1.2ä¸è§å®ï¼domainå®éç¨IDç»ä¸ç¼ç çååä½ç¼ç ã彿 éå½Dä¸å®ä¹å8ä½ä¸ºä¸å¿ç¼ç ï¼ç±ç级ãå¸çº§ãåºçº§ãåºå±ç¼å·ç»æï¼åç §GB/T 2260-2007ï¼ # å两ä½ä¸ºè¡ä¸ç¼ç ï¼å®ä¹åç §éå½D.3 @@ -34,7 +35,8 @@ domain: 3701020049 id: 37010200492000000001 # é»è®¤è®¾å¤è®¤è¯å¯ç ï¼åç»æ©å±ä½¿ç¨è®¾å¤åç¬å¯ç password: admin password: admin123 media: ip: 10.200.64.88 # ip: 10.200.64.88 ip: 192.168.0.102 port: 10000 wikis/images/ºËÐÄÁ÷³Ì.png