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