diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java index 9a664fc..e7eaac7 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java @@ -94,6 +94,49 @@ public class SIPCommander implements ISIPCommander { 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(); +} + + /** * 云台控制,支持方向与缩放控制 * @@ -115,7 +158,7 @@ public class SIPCommander implements ISIPCommander { ptzXml.append("DeviceControl"); ptzXml.append("" + (int)((Math.random()*9+1)*100000) + ""); ptzXml.append("" + channelId + ""); - ptzXml.append("" + ""); + ptzXml.append("" + cmdString(leftRight, upDown, inOut, moveSpeed, zoomSpeed) + ""); ptzXml.append(""); ptzXml.append(""); ptzXml.append(""); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index bec0e00..7e6bc40 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -26,7 +26,8 @@ spring: 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 @@ sip: 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 \ No newline at end of file