src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java
@@ -239,58 +239,58 @@ } public static void main(String[] args) throws NoSuchAlgorithmException { String realm = "3402000000"; String username = "44010000001180008012"; // public static void main(String[] args) throws NoSuchAlgorithmException { // String realm = "3402000000"; // String username = "44010000001180008012"; String nonce = "07cab60999fbf643264ace27d3b7de8b"; String uri = "sip:34020000002000000001@3402000000"; // qop 保护质量 包含auth(默认的)和auth-int(增加了报文完整性检测)两种策略 String qop = "auth"; // String nonce = "07cab60999fbf643264ace27d3b7de8b"; // String uri = "sip:34020000002000000001@3402000000"; // // qop 保护质量 包含auth(默认的)和auth-int(增加了报文完整性检测)两种策略 // String qop = "auth"; // 客户端随机数,这是一个不透明的字符串值,由客户端提供,并且客户端和服务器都会使用,以避免用明文文本。 // 这使得双方都可以查验对方的身份,并对消息的完整性提供一些保护 //String cNonce = authHeader.getCNonce(); // // 客户端随机数,这是一个不透明的字符串值,由客户端提供,并且客户端和服务器都会使用,以避免用明文文本。 // // 这使得双方都可以查验对方的身份,并对消息的完整性提供一些保护 // //String cNonce = authHeader.getCNonce(); // nonce计数器,是一个16进制的数值,表示同一nonce下客户端发送出请求的数量 int nc = 1; String ncStr = new DecimalFormat("00000000").format(nc); // String ncStr = new DecimalFormat("00000000").format(Integer.parseInt(nc + "", 16)); MessageDigest messageDigest = MessageDigest.getInstance(DEFAULT_ALGORITHM); String A1 = username + ":" + realm + ":" + "12345678"; String A2 = "REGISTER" + ":" + uri; byte mdbytes[] = messageDigest.digest(A1.getBytes()); String HA1 = toHexString(mdbytes); System.out.println("A1: " + A1); System.out.println("A2: " + A2); // // nonce计数器,是一个16进制的数值,表示同一nonce下客户端发送出请求的数量 // int nc = 1; // String ncStr = new DecimalFormat("00000000").format(nc); // // String ncStr = new DecimalFormat("00000000").format(Integer.parseInt(nc + "", 16)); // MessageDigest messageDigest = MessageDigest.getInstance(DEFAULT_ALGORITHM); // String A1 = username + ":" + realm + ":" + "12345678"; // String A2 = "REGISTER" + ":" + uri; // byte mdbytes[] = messageDigest.digest(A1.getBytes()); // String HA1 = toHexString(mdbytes); // System.out.println("A1: " + A1); // System.out.println("A2: " + A2); mdbytes = messageDigest.digest(A2.getBytes()); String HA2 = toHexString(mdbytes); System.out.println("HA1: " + HA1); System.out.println("HA2: " + HA2); String cnonce = "0a4f113b"; System.out.println("nonce: " + nonce); System.out.println("nc: " + ncStr); System.out.println("cnonce: " + cnonce); System.out.println("qop: " + qop); String KD = HA1 + ":" + nonce; // mdbytes = messageDigest.digest(A2.getBytes()); // String HA2 = toHexString(mdbytes); // System.out.println("HA1: " + HA1); // System.out.println("HA2: " + HA2); // String cnonce = "0a4f113b"; // System.out.println("nonce: " + nonce); // System.out.println("nc: " + ncStr); // System.out.println("cnonce: " + cnonce); // System.out.println("qop: " + qop); // String KD = HA1 + ":" + nonce; if (qop != null && qop.equals("auth") ) { if (nc != -1) { KD += ":" + ncStr; } if (cnonce != null) { KD += ":" + cnonce; } KD += ":" + qop; } KD += ":" + HA2; System.out.println("KD: " + KD); mdbytes = messageDigest.digest(KD.getBytes()); String mdString = toHexString(mdbytes); System.out.println("mdString: " + mdString); String response = "4f0507d4b87cdecff04bdaf4c96348f0"; System.out.println("response: " + response); } // if (qop != null && qop.equals("auth") ) { // if (nc != -1) { // KD += ":" + ncStr; // } // if (cnonce != null) { // KD += ":" + cnonce; // } // KD += ":" + qop; // } // KD += ":" + HA2; // System.out.println("KD: " + KD); // mdbytes = messageDigest.digest(KD.getBytes()); // String mdString = toHexString(mdbytes); // System.out.println("mdString: " + mdString); // String response = "4f0507d4b87cdecff04bdaf4c96348f0"; // System.out.println("response: " + response); // } } src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
@@ -2,7 +2,6 @@ import java.io.ByteArrayInputStream; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; import javax.sip.address.SipURI; src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
@@ -17,6 +17,7 @@ import java.util.*; @SuppressWarnings("unchecked") @Component public class ZLMMediaListManager { src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
@@ -4,12 +4,10 @@ import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.conf.MediaConfig; import okhttp3.*; import org.checkerframework.checker.units.qual.A; import org.jetbrains.annotations.NotNull; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.io.*; src/main/java/com/genersoft/iot/vmp/onvif/impl/ONVIFServerIMpl.java
@@ -17,6 +17,7 @@ import java.util.List; import java.util.Map; @SuppressWarnings("rawtypes") /** * 处理onvif的各种操作 */ src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -96,15 +96,16 @@ try { String classPath = ResourceUtils.getURL("classpath:").getPath(); // System.out.println(classPath); String path = classPath + "static/static/snap/"; // 兼容打包为jar的class路径 if(classPath.contains("jar")) { classPath = classPath.substring(0, classPath.lastIndexOf(".")); classPath = classPath.substring(0, classPath.lastIndexOf("/")); path = classPath + "/snap/"; classPath = classPath.substring(0, classPath.lastIndexOf("/") + 1); } if (path.startsWith("file:")) { path = path.substring(path.indexOf(":") + 1, path.length()); if (classPath.startsWith("file:")) { classPath = classPath.substring(classPath.indexOf(":") + 1, classPath.length()); } String path = classPath + "static/static/snap/"; // 兼容Windows系统路径(去除前面的“/”) if(System.getProperty("os.name").contains("indows")) { path = path.substring(1, path.length()); } @@ -116,7 +117,7 @@ StreamInfo streamInfoForSuccess = (StreamInfo)wvpResult.getData(); String streamUrl = streamInfoForSuccess.getFmp4(); // 请求截图 zlmresTfulUtils.getSnap(streamUrl, 5, 1, path, fileName); zlmresTfulUtils.getSnap(streamUrl, 15, 1, path, fileName); } } System.out.println(path); src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/device/DeviceQuery.java
@@ -132,15 +132,14 @@ */ @ApiOperation("同步设备通道") @ApiImplicitParams({ @ApiImplicitParam(name="deviceId", value = "设备id", required = true ,dataTypeClass = String.class), @ApiImplicitParam(name="deviceId", value = "设备id", required = true, dataTypeClass = String.class), }) @PostMapping("/devices/{deviceId}/sync") public DeferredResult<ResponseEntity<Device>> devicesSync(@PathVariable String deviceId){ if (logger.isDebugEnabled()) { } logger.debug("设备通道信息同步API调用,deviceId:" + deviceId); } Device device = storager.queryVideoDevice(deviceId); cmder.catalogQuery(device, event -> { Response response = event.getResponse(); @@ -264,7 +263,7 @@ @ApiImplicitParams({ @ApiImplicitParam(name = "deviceId", value = "设备id", required = true, dataTypeClass = String.class), @ApiImplicitParam(name = "streamMode", value = "数据流传输模式, 取值:" + "UDP(udp传输),TCP-ACTIVE(tcp主动模式,暂不支持),TCP-PASSIVE(tcp被动模式)"), "UDP(udp传输),TCP-ACTIVE(tcp主动模式,暂不支持),TCP-PASSIVE(tcp被动模式)", dataTypeClass = String.class), }) @PostMapping("/transport/{deviceId}/{streamMode}") public ResponseEntity<PageInfo> updateTransport(@PathVariable String deviceId, @PathVariable String streamMode){ src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/gbStream/GbStreamController.java
@@ -56,7 +56,7 @@ */ @ApiOperation("移除国标关联") @ApiImplicitParams({ @ApiImplicitParam(name = "gbStreamParam", value = "GbStreamParam", required = true , @ApiImplicitParam(name = "gbStreamParam", value = "GbStreamParam", required = true, dataTypeClass = GbStreamParam.class), }) @DeleteMapping(value = "/del") @@ -77,7 +77,7 @@ */ @ApiOperation("保存国标关联") @ApiImplicitParams({ @ApiImplicitParam(name = "gbStreamParam", value = "GbStreamParam", required = true , dataTypeClass = GbStreamParam.class), @ApiImplicitParam(name = "gbStreamParam", value = "GbStreamParam", required = true, dataTypeClass = GbStreamParam.class), }) @PostMapping(value = "/add") @ResponseBody src/main/java/com/genersoft/iot/vmp/vmanager/record/RecoderProxyController.java
@@ -14,6 +14,8 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.UnsupportedEncodingException; import java.net.URLDecoder; @RestController @@ -31,7 +33,7 @@ @ResponseBody @RequestMapping(value = "/**/**/**", produces = "application/json;charset=UTF-8") public Object proxy(HttpServletRequest request, HttpServletResponse response){ public Object proxy(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException{ String baseRequestURI = request.getRequestURI(); @@ -51,7 +53,7 @@ mediaInfo.getSdpIp(), mediaConfig.getRecordAssistPort(), baseRequestURI.substring(baseRequestURI.indexOf(mediaId) + mediaId.length()), URLDecoder.decode(request.getQueryString()) URLDecoder.decode(request.getQueryString(), "UTF-8") ); // 发送请求 RestTemplate restTemplate = new RestTemplate();