Lawrence
2020-06-09 89c622406283bc2b8f214280bb797a881e0c26a5
实现PTZ控制代码
2个文件已修改
53 ■■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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();
}
    /**
     * 云台控制,支持方向与缩放控制
     * 
@@ -115,7 +158,7 @@
            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>" + cmdString(leftRight, upDown, inOut, moveSpeed, zoomSpeed) + "</PTZCmd>");
            ptzXml.append("<Info>");
            ptzXml.append("</Info>");
            ptzXml.append("</Control>");
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