diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
index 80d5ee5f..27fc7aef 100755
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
@@ -22,57 +22,6 @@ import java.text.ParseException;
*/
public interface ISIPCommander {
- /**
- * 云台方向放控制,使用配置文件中的默认镜头移动速度
- *
- * @param device 控制设备
- * @param channelId 预览通道
- * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移
- * @param upDown 镜头上移下移 0:停止 1:上移 2:下移
- */
- void ptzdirectCmd(Device device,String channelId,int leftRight, int upDown) throws InvalidArgumentException, ParseException, SipException;
-
- /**
- * 云台方向放控制
- *
- * @param device 控制设备
- * @param channelId 预览通道
- * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移
- * @param upDown 镜头上移下移 0:停止 1:上移 2:下移
- * @param moveSpeed 镜头移动速度
- */
- void ptzdirectCmd(Device device,String channelId,int leftRight, int upDown, int moveSpeed) throws InvalidArgumentException, ParseException, SipException;
-
- /**
- * 云台缩放控制,使用配置文件中的默认镜头缩放速度
- *
- * @param device 控制设备
- * @param channelId 预览通道
- * @param inOut 镜头放大缩小 0:停止 1:缩小 2:放大
- */
- void ptzZoomCmd(Device device,String channelId,int inOut) throws InvalidArgumentException, ParseException, SipException;
-
- /**
- * 云台缩放控制
- *
- * @param device 控制设备
- * @param channelId 预览通道
- * @param inOut 镜头放大缩小 0:停止 1:缩小 2:放大
- */
- void ptzZoomCmd(Device device,String channelId,int inOut, int moveSpeed) throws InvalidArgumentException, ParseException, SipException;
-
- /**
- * 云台控制,支持方向与缩放控制
- *
- * @param device 控制设备
- * @param channelId 预览通道
- * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移
- * @param upDown 镜头上移下移 0:停止 1:上移 2:下移
- * @param inOut 镜头放大缩小 0:停止 1:缩小 2:放大
- * @param moveSpeed 镜头移动速度
- * @param zoomSpeed 镜头缩放速度
- */
- void ptzCmd(Device device,String channelId,int leftRight, int upDown, int inOut, int moveSpeed, int zoomSpeed) throws InvalidArgumentException, SipException, ParseException;
void ptzCmd(Device device, String channelId, PTZCommand ptzCommand) throws InvalidArgumentException, SipException, ParseException;
/**
@@ -86,14 +35,6 @@ public interface ISIPCommander {
* @param combineCode2 组合码2
*/
void frontEndCmd(Device device, String channelId, int cmdCode, int parameter1, int parameter2, int combineCode2) throws SipException, InvalidArgumentException, ParseException;
-
- /**
- * 前端控制指令(用于转发上级指令)
- * @param device 控制设备
- * @param channelId 预览通道
- * @param cmdString 前端控制指令串
- */
- void fronEndCmd(Device device, String channelId, String cmdString, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException;
/**
* 请求预览视频流
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 48c1bfb0..16e78815 100755
--- 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
@@ -34,10 +34,7 @@ import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;
import org.springframework.util.ObjectUtils;
-import javax.sip.InvalidArgumentException;
-import javax.sip.ResponseEvent;
-import javax.sip.SipException;
-import javax.sip.SipFactory;
+import javax.sip.*;
import javax.sip.header.CallIdHeader;
import javax.sip.message.Request;
import java.text.ParseException;
@@ -81,120 +78,10 @@ public class SIPCommander implements ISIPCommander {
private IMediaServerService mediaServerService;
- /**
- * 云台方向放控制,使用配置文件中的默认镜头移动速度
- *
- * @param device 控制设备
- * @param channelId 预览通道
- * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移
- * @param upDown 镜头上移下移 0:停止 1:上移 2:下移
- */
@Override
- public void ptzdirectCmd(Device device, String channelId, int leftRight, int upDown) throws InvalidArgumentException, ParseException, SipException {
- ptzCmd(device, channelId, leftRight, upDown, 0, sipConfig.getPtzSpeed(), 0);
- }
-
- /**
- * 云台方向放控制
- *
- * @param device 控制设备
- * @param channelId 预览通道
- * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移
- * @param upDown 镜头上移下移 0:停止 1:上移 2:下移
- * @param moveSpeed 镜头移动速度
- */
- @Override
- public void ptzdirectCmd(Device device, String channelId, int leftRight, int upDown, int moveSpeed) throws InvalidArgumentException, ParseException, SipException {
- ptzCmd(device, channelId, leftRight, upDown, 0, moveSpeed, 0);
- }
-
- /**
- * 云台缩放控制,使用配置文件中的默认镜头缩放速度
- *
- * @param device 控制设备
- * @param channelId 预览通道
- * @param inOut 镜头放大缩小 0:停止 1:缩小 2:放大
- */
- @Override
- public void ptzZoomCmd(Device device, String channelId, int inOut) throws InvalidArgumentException, ParseException, SipException {
- ptzCmd(device, channelId, 0, 0, inOut, 0, sipConfig.getPtzSpeed());
- }
-
- /**
- * 云台缩放控制
- *
- * @param device 控制设备
- * @param channelId 预览通道
- * @param inOut 镜头放大缩小 0:停止 1:缩小 2:放大
- * @param zoomSpeed 镜头缩放速度
- */
- @Override
- public void ptzZoomCmd(Device device, String channelId, int inOut, int zoomSpeed) throws InvalidArgumentException, ParseException, SipException {
- ptzCmd(device, channelId, 0, 0, inOut, 0, zoomSpeed);
- }
-
- /**
- * 云台指令码计算
- *
- * @param cmdCode 指令码
- * @param parameter1 数据1
- * @param parameter2 数据2
- * @param combineCode2 组合码2
- */
- public static String frontEndCmdString(int cmdCode, int parameter1, int parameter2, int combineCode2) {
- StringBuilder builder = new StringBuilder("A50F01");
- String strTmp;
- strTmp = String.format("%02X", cmdCode);
- builder.append(strTmp, 0, 2);
- strTmp = String.format("%02X", parameter1);
- builder.append(strTmp, 0, 2);
- strTmp = String.format("%02X", parameter2);
- builder.append(strTmp, 0, 2);
- //优化zoom变倍速率
- if ((combineCode2 > 0) && (combineCode2 <16))
- {
- combineCode2 = 16;
- }
- strTmp = String.format("%X", combineCode2);
- builder.append(strTmp, 0, 1).append("0");
- //计算校验码
- int checkCode = (0XA5 + 0X0F + 0X01 + cmdCode + parameter1 + parameter2 + (combineCode2 & 0XF0)) % 0X100;
- strTmp = String.format("%02X", checkCode);
- builder.append(strTmp, 0, 2);
- return builder.toString();
- }
-
- /**
- * 云台控制,支持方向与缩放控制
- *
- * @param device 控制设备
- * @param channelId 预览通道
- * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移
- * @param upDown 镜头上移下移 0:停止 1:上移 2:下移
- * @param inOut 镜头放大缩小 0:停止 1:缩小 2:放大
- * @param moveSpeed 镜头移动速度
- * @param zoomSpeed 镜头缩放速度
- */
- @Override
- 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);
- StringBuilder ptzXml = new StringBuilder(200);
- String charset = device.getCharset();
- ptzXml.append("\r\n");
- ptzXml.append("\r\n");
- ptzXml.append("DeviceControl\r\n");
- ptzXml.append("" + SipUtils.getNewSn() + "\r\n");
- ptzXml.append("" + channelId + "\r\n");
- ptzXml.append("" + cmdStr + "\r\n");
- ptzXml.append("\r\n");
- ptzXml.append("5\r\n");
- ptzXml.append("\r\n");
- ptzXml.append("\r\n");
-
- Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
-
- sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
+ public void ptzCmd(Device device, String channelId, PTZCommand ptzCommand) throws InvalidArgumentException, SipException, ParseException {
+ String cmdStr = SipUtils.cmdString(ptzCommand);
+ frontEndCmd(device, channelId, cmdStr);
}
/**
@@ -208,9 +95,14 @@ public class SIPCommander implements ISIPCommander {
* @param combineCode2 组合码2
*/
@Override
- public void frontEndCmd(Device device, String channelId, int cmdCode, int parameter1, int parameter2, int combineCode2) throws SipException, InvalidArgumentException, ParseException {
+ public void frontEndCmd(Device device, String channelId, int cmdCode, int parameter1, int parameter2, int combineCode2)
+ throws SipException, InvalidArgumentException, ParseException {
+ String cmdStr = SipUtils.frontEndCmdString(cmdCode, parameter1, parameter2, combineCode2);
+ frontEndCmd(device, channelId, cmdStr);
+ }
+ private void frontEndCmd(Device device, String channelId, String cmdStr)
+ throws SipException, InvalidArgumentException, ParseException {
- String cmdStr = frontEndCmdString(cmdCode, parameter1, parameter2, combineCode2);
StringBuffer ptzXml = new StringBuffer(200);
String charset = device.getCharset();
ptzXml.append("\r\n");
@@ -224,43 +116,11 @@ public class SIPCommander implements ISIPCommander {
ptzXml.append("\r\n");
ptzXml.append("\r\n");
-
-
-
SIPRequest request = (SIPRequest) headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
}
- /**
- * 前端控制指令(用于转发上级指令)
- *
- * @param device 控制设备
- * @param channelId 预览通道
- * @param cmdString 前端控制指令串
- */
- @Override
- public void fronEndCmd(Device device, String channelId, String cmdString, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException {
-
- StringBuffer ptzXml = new StringBuffer(200);
- String charset = device.getCharset();
- ptzXml.append("\r\n");
- ptzXml.append("\r\n");
- ptzXml.append("DeviceControl\r\n");
- ptzXml.append("" + SipUtils.getNewSn() + "\r\n");
- ptzXml.append("" + channelId + "\r\n");
- ptzXml.append("" + cmdString + "\r\n");
- ptzXml.append("\r\n");
- ptzXml.append("5\r\n");
- ptzXml.append("\r\n");
- ptzXml.append("\r\n");
-
-
- Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
- sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request, errorEvent, okEvent);
-
- }
-
/**
* 请求预览视频流
*
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java
index de31422c..bbbff299 100755
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java
@@ -156,9 +156,11 @@ public class DeviceControlQueryMessageHandler extends SIPRequestProcessorParent
return;
}
PTZCommand ptzCommand = (PTZCommand)commandInfo;
- logger.info("\r\n[云台控制]: \r\n镜头变倍: 放大: {},缩小: {}, " +
- " \r\n垂直方向控制: 上: {}, 下: {}, 左: {},右: {}" +
+ logger.info("\r\n[云台控制]: 命令: {}" +
+ " \r\n镜头变倍: 放大: {},缩小: {}, " +
+ " \r\n方向控制: 上: {}, 下: {}, 左: {},右: {}" +
" \r\n平控制速度相对值: {}, 垂直控制速度相对值: {}, 变倍控制速度相对值: {}",
+ cmdString,
ptzCommand.isIn(), ptzCommand.isOut(),
ptzCommand.isUp(), ptzCommand.isDown(), ptzCommand.isLeft(), ptzCommand.isRight(),
ptzCommand.getxSpeed(), ptzCommand.getySpeed(), ptzCommand.getzSpeed());
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
index cda0694c..51d0069e 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
@@ -96,49 +96,24 @@ public class SipUtils {
}
- /**
- * 云台指令码计算
- *
- * @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; // 缩小
- }
+ public static String frontEndCmdString(int cmdCode, int parameter1, int parameter2, int combineCode2) {
StringBuilder builder = new StringBuilder("A50F01");
String strTmp;
strTmp = String.format("%02X", cmdCode);
builder.append(strTmp, 0, 2);
- strTmp = String.format("%02X", moveSpeed);
+ strTmp = String.format("%02X", parameter1);
builder.append(strTmp, 0, 2);
+ strTmp = String.format("%02X", parameter2);
builder.append(strTmp, 0, 2);
-
- //优化zoom低倍速下的变倍速率
- if ((zoomSpeed > 0) && (zoomSpeed <16))
+ //优化zoom变倍速率
+ if ((combineCode2 > 0) && (combineCode2 <16))
{
- zoomSpeed = 16;
+ combineCode2 = 16;
}
- strTmp = String.format("%X", zoomSpeed);
+ strTmp = String.format("%X", combineCode2);
builder.append(strTmp, 0, 1).append("0");
//计算校验码
- int checkCode = (0XA5 + 0X0F + 0X01 + cmdCode + moveSpeed + moveSpeed + (zoomSpeed /*<< 4*/ & 0XF0)) % 0X100;
+ int checkCode = (0XA5 + 0X0F + 0X01 + cmdCode + parameter1 + parameter2 + (combineCode2 & 0XF0)) % 0X100;
strTmp = String.format("%02X", checkCode);
builder.append(strTmp, 0, 2);
return builder.toString();
@@ -164,15 +139,19 @@ public class SipUtils {
if (command.isOut()) {
byte4Int += 32;
}
+ if (command.getzSpeed() < 0 || command.getzSpeed() > 15) {
+ command.setzSpeed(15);
+ }
StringBuilder builder = new StringBuilder("A50F01");
- builder.append(Integer.toHexString(byte4Int), 0, 2);
- builder.append(Integer.toHexString(command.getxSpeed()), 0, 2);
- builder.append(Integer.toHexString(command.getySpeed()), 0, 2);
- builder.append(Integer.toHexString(command.getzSpeed()), 0, 1);
+ builder.append(String.format("%02X", byte4Int))
+ .append(String.format("%02X", command.getxSpeed()))
+ .append(String.format("%02X", command.getySpeed()))
+ .append(String.format("%X", command.getzSpeed()))
+ .append("0");
//计算校验码
int checkCode = (0XA5 + 0X0F + 0X01 + byte4Int + command.getxSpeed() + command.getySpeed() + (command.getzSpeed() /*<< 4*/ & 0XF0)) % 0X100;
- builder.append(String.format("%02X", checkCode), 0, 2);
+ builder.append(String.format("%02X", checkCode));
return builder.toString();
}