From 5b5b25edecb7639bdb470164f603281bfd1a4aff Mon Sep 17 00:00:00 2001
From: zhanghua <314079846@qq.com>
Date: 星期一, 04 十二月 2023 17:45:43 +0800
Subject: [PATCH] 区分100路视频
---
ycl-platform/src/main/java/com/ycl/util/VideoUtil.java | 284 +++++++++++++++++++++++++++++++++++++++++++++-----------
1 files changed, 226 insertions(+), 58 deletions(-)
diff --git a/ycl-platform/src/main/java/com/ycl/util/VideoUtil.java b/ycl-platform/src/main/java/com/ycl/util/VideoUtil.java
index 5617455..48bde5e 100644
--- a/ycl-platform/src/main/java/com/ycl/util/VideoUtil.java
+++ b/ycl-platform/src/main/java/com/ycl/util/VideoUtil.java
@@ -1,13 +1,19 @@
package com.ycl.util;
-import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import cn.hutool.json.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
-import com.ycl.api.CommonResult;
+import com.hikvision.artemis.sdk.ArtemisHttpUtil;
+import com.hikvision.artemis.sdk.config.ArtemisConfig;
import com.ycl.dto.v1.Req.FirstReq;
import com.ycl.dto.v1.Req.SecondReq;
import com.ycl.dto.v1.Res.FirstRes;
+import com.ycl.dto.video.Camera;
+import com.ycl.dto.video.HttpResponseResult;
+import com.ycl.dto.video.PageResult;
import com.ycl.utils.MD5Util;
import lombok.SneakyThrows;
+import org.apache.http.HttpResponse;
+import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.*;
import org.springframework.http.client.ClientHttpResponse;
@@ -17,21 +23,24 @@
import org.springframework.web.client.RestTemplate;
import java.net.URI;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
@Component
public class VideoUtil {
@Value("${videoPoint.url}")
- private String url;
+ private String url;
@Value("${videoPoint.userName}")
- private String userName;
+ private String userName;
@Value("${videoPoint.passWord}")
- private String passWord;
+ private String passWord;
@Value("${videoPoint.ip}")
- private String ip;
+ private String ip;
/*
* @Description subType:绫诲瀷int锛岄�夊~銆傜爜娴佺被鍨嬶紝0:涓荤爜娴併��1:杈呮祦1銆�2:杈呮祦2銆傞粯璁や负0涓荤爜娴併�俿cheme:绫诲瀷string锛岄�夊~銆傚崗璁被鍨嬶紝鏀寔RTSP銆丗LV_HTTP銆丠LS涓夌锛岄粯璁TSP銆�
@@ -39,66 +48,225 @@
* @return java.lang.String
**/
@SneakyThrows
- public String getVideo(String code, String scheme,Integer subType) {
- String clientType = "winpc";
- String reqUrl = "/videoService/accounts/authorize";
- String deviceUrl = "/videoService/devicesManager/devices";
- String monitorUrl = "/videoService/realmonitor/uri?subType=" + subType + "&scheme=" + scheme + "&channelId=";
+ public String getVideo(String code, String scheme, Integer subType) {
+ // System.out.println("寮�濮嬭棰戣姹傦細" + code);
+ try {
- RestTemplate restTemplate = new RestTemplate();
- restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {
- @Override
- public boolean hasError(HttpStatus status) {
- return super.hasError(status);
+ String clientType = "winpc";
+ String reqUrl = "/videoService/accounts/authorize";
+ String deviceUrl = "/videoService/devicesManager/devices";
+// String monitorUrl = "/videoService/realmonitor/uri?subType=" + subType + "&scheme=" + scheme + "&channelId=";
+
+ String monitorUrl = "/videoService/realmonitor/uri?trackId=&encryptedInfo=&userId=&urlType=1&keyIndex=®ionId=&packtype=Private&planId=&subType=" + subType + "&isroute=false&streamType=&locationEnable=false&domainId=&duration=600&scheme=RTSP&dataType=2&extend=&channelId=";
+ if (!"RTSP".equals(scheme)) {
+ monitorUrl = "/videoService/realmonitor/uri?subType=" + subType + "&scheme=" + scheme + "&channelId=";
}
+ RestTemplate restTemplate = new RestTemplate();
+ restTemplate.setErrorHandler(new DefaultResponseErrorHandler() {
+ @Override
+ public boolean hasError(HttpStatus status) {
+ return super.hasError(status);
+ }
- @Override
- public void handleError(URI url, HttpMethod method, ClientHttpResponse response) {
+ @Override
+ public void handleError(URI url, HttpMethod method, ClientHttpResponse response) {
+ }
+ });
+ SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();
+ simpleClientHttpRequestFactory.setOutputStreaming(false);
+ restTemplate.setRequestFactory(simpleClientHttpRequestFactory);
+
+ //璇锋眰澶�
+ HttpHeaders httpHeaders = new HttpHeaders();
+ httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+
+ //绗竴娆℃潈闄愯姹備綋
+ FirstReq firstReq = new FirstReq();
+ firstReq.setIpAddress(ip);
+ firstReq.setUserName(userName);
+ firstReq.setClientType(clientType);
+ ObjectMapper objectMapper = new ObjectMapper();
+
+ HttpEntity<String> firstEntity = new HttpEntity<>(objectMapper.writeValueAsString(firstReq), httpHeaders);
+ ResponseEntity<String> responseEntity = restTemplate.postForEntity(url + reqUrl, firstEntity, String.class);
+
+ FirstRes firstRes = objectMapper.readValue(responseEntity.getBody(), FirstRes.class);
+
+ String signature = MD5Util.md5Encrypt(passWord);
+ signature = MD5Util.md5Encrypt(userName + signature);
+ signature = MD5Util.md5Encrypt(signature);
+ signature = MD5Util.md5Encrypt(userName + ":" + firstRes.getRealm() + ":" + signature);
+ signature = MD5Util.md5Encrypt(signature + ":" + firstRes.getRandomKey());
+
+ SecondReq secondReq = new SecondReq();
+ secondReq.setIpAddress(ip);
+ secondReq.setEncryptType(firstRes.getEncryptType());
+ secondReq.setSignature(signature);
+ secondReq.setRandomKey(firstRes.getRandomKey());
+ secondReq.setClientType(clientType);
+ secondReq.setUserName(userName);
+
+ HttpEntity<String> secondEntity = new HttpEntity<>(objectMapper.writeValueAsString(secondReq), httpHeaders);
+ ResponseEntity<String> secondResEntity = restTemplate.postForEntity(url + reqUrl, secondEntity, String.class);
+ HttpHeaders deviceHeaders = new HttpHeaders();
+ deviceHeaders.add("X-Subject-Token", objectMapper.readTree(secondResEntity.getBody()).get("token").textValue());
+ HttpEntity<Object> deviceEntity = new HttpEntity<>(deviceHeaders);
+ // System.out.println("瑙嗛璁惧璇锋眰鍦板潃锛�" + url + deviceUrl + "/" + code);
+
+ ResponseEntity<String> exchange = restTemplate.exchange(url + deviceUrl + "/" + code, HttpMethod.GET, deviceEntity, String.class);
+ // System.out.println("寮�濮嬭棰戣韩浠借姹傜粨鏋滐細" + exchange.getBody());
+ String channelId = objectMapper.readTree(objectMapper.readTree(objectMapper.readTree(exchange.getBody()).get("encoderUnit").toString()).get("channels").get(0).toString()).get("channelId").textValue();
+ // System.out.println("瑙嗛璇锋眰鍦板潃锛�" + url + monitorUrl + channelId);
+ ResponseEntity<String> monitorReq = restTemplate.exchange(url + monitorUrl + channelId, HttpMethod.GET, deviceEntity, String.class);
+ // System.out.println("瑙嗛璇锋眰杩斿洖鍙傛暟锛�" + monitorReq.getBody());
+ return objectMapper.readTree(monitorReq.getBody()).get("url").textValue();
+
+ } catch (Exception ex) {
+ System.out.println("鑾峰彇瑙嗛寮傚父锛�" + ex.getMessage());
+ return "鑾峰彇鍦板潃澶辫触锛岃妫�鏌ode鍊�";
+ }
+ }
+
+
+ private final String ARTEMIS_PATH = "/artemis";
+ private final String HOST = "10.53.133.82:1443";
+ private final String APP_KEY = "29967737";
+ private final String APP_SECRET = "LElVf9Ct3ykStZHCmFNZ";
+
+ public PageResult<Camera> callPostCameras(Integer pageNo, Integer pageSize, String treeCode) throws Exception {
+
+ ArtemisConfig config = new ArtemisConfig();
+ config.setHost(HOST); // 浠g悊API缃戝叧nginx鏈嶅姟鍣╥p绔彛
+ config.setAppKey(APP_KEY); // 绉橀挜appkey
+ config.setAppSecret(APP_SECRET);// 绉橀挜appSecret
+
+ final String getSecurityApi = ARTEMIS_PATH + "/api/resource/v1/cameras"; // 鎺ュ彛璺緞
+ Map<String, String> path = new HashMap<String, String>(2) {
+ {
+ put("https://", getSecurityApi);
}
- });
- SimpleClientHttpRequestFactory simpleClientHttpRequestFactory = new SimpleClientHttpRequestFactory();
- simpleClientHttpRequestFactory.setOutputStreaming(false);
- restTemplate.setRequestFactory(simpleClientHttpRequestFactory);
+ };
+ Map<String, String> head = new HashMap<String, String>(2) { //get璇锋眰鐨刪ead鍙傛暟
+ {
+ put("headpost", "sky-test");
+ }
+ };
+ JSONObject jsonBody = new JSONObject();
+ jsonBody.put("pageNo", pageNo);
+ jsonBody.put("pageSize", pageSize);
+ jsonBody.put("treeCode", treeCode);
+ String body = jsonBody.toString();
+ System.out.println("娴峰悍瑙嗛寮�濮嬭姹傦細");
+ //鍙傛暟鏍规嵁鎺ュ彛瀹為檯鎯呭喌璁剧疆
+ HttpResponse result = ArtemisHttpUtil.doPostStringImgArtemis(config, path, body, null, null, "application/json", head);
+ try {
+ String strResult = EntityUtils.toString(result.getEntity());
+ HttpResponseResult responseResult = com.alibaba.fastjson.JSONObject.parseObject(strResult, HttpResponseResult.class);
+ System.out.println("娴峰悍瑙嗛缁撴灉锛�" + responseResult.toString());
+ if ("0".equals(responseResult.getCode())) {
+ com.alibaba.fastjson.JSONObject jsonObject = responseResult.getData();
+ String strList = jsonObject.getString("list");
+ Integer total = Integer.parseInt(jsonObject.getString("total"));
+ Integer resultPageSize = Integer.parseInt(jsonObject.getString("pageSize"));
+ Integer resultPageNo = Integer.parseInt(jsonObject.getString("pageNo"));
+ List<Camera> ls = com.alibaba.fastjson.JSONObject.parseArray(strList, Camera.class);
+ PageResult<Camera> pageResult = new PageResult<>(total, resultPageSize, resultPageNo, ls);
+ return pageResult;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
- //璇锋眰澶�
- HttpHeaders httpHeaders = new HttpHeaders();
- httpHeaders.setContentType(MediaType.APPLICATION_JSON);
+ public String getKHVideo(String code) throws Exception {
- //绗竴娆℃潈闄愯姹備綋
- FirstReq firstReq = new FirstReq();
- firstReq.setIpAddress(ip);
- firstReq.setUserName(userName);
- firstReq.setClientType(clientType);
- ObjectMapper objectMapper = new ObjectMapper();
+ ArtemisConfig config = new ArtemisConfig();
+ config.setHost(HOST); // 浠g悊API缃戝叧nginx鏈嶅姟鍣╥p绔彛
+ config.setAppKey(APP_KEY); // 绉橀挜appkey
+ config.setAppSecret(APP_SECRET);// 绉橀挜appSecret
+ final String getSecurityApi = ARTEMIS_PATH + "/api/video/v1/cameras/previewURLs"; // 鎺ュ彛璺緞
+ Map<String, String> path = new HashMap<String, String>(2) {
+ {
+ put("https://", getSecurityApi);
+ }
+ };
+ Map<String, String> head = new HashMap<String, String>(2) { //get璇锋眰鐨刪ead鍙傛暟
+ {
+ put("headpost", "sky-test");
+ }
+ };
+ Map<String, String> query = new HashMap<String, String>(2) { //get璇锋眰鐨刪ead鍙傛暟
+ {
+ put("domainId", "0");
+ }
+ };
+ JSONObject jsonBody = new JSONObject();
+ jsonBody.put("cameraIndexCode", code);
+ jsonBody.put("streamType", 0);
+ jsonBody.put("protocol", "hls");
+ jsonBody.put("transmode", 0);
+ jsonBody.put("expand","transcode=1&videotype=h264");
+ String body = jsonBody.toString();
+ //鍙傛暟鏍规嵁鎺ュ彛瀹為檯鎯呭喌璁剧疆
+ HttpResponse result = ArtemisHttpUtil.doPostStringImgArtemis(config, path, body, null, null, "application/json", null);
+ System.out.println("娴峰悍瀹屾垚璇锋眰");
+ try {
+ String strResult = EntityUtils.toString(result.getEntity());
+ System.out.println("娴峰悍杩斿洖缁撴灉锛�" + strResult);
+ HttpResponseResult responseResult = com.alibaba.fastjson.JSONObject.parseObject(strResult, HttpResponseResult.class);
+ if ("0".equals(responseResult.getCode())) {
+ com.alibaba.fastjson.JSONObject jsonObject = responseResult.getData();
+ String url = jsonObject.getString("url");
+ return url;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return "";
+ }
- HttpEntity<String> firstEntity = new HttpEntity<>(objectMapper.writeValueAsString(firstReq), httpHeaders);
- ResponseEntity<String> responseEntity = restTemplate.postForEntity(url + reqUrl, firstEntity, String.class);
+ public String getKHPresets(String code) throws Exception {
- FirstRes firstRes = objectMapper.readValue(responseEntity.getBody(), FirstRes.class);
-
- String signature = MD5Util.md5Encrypt(passWord);
- signature = MD5Util.md5Encrypt(userName + signature);
- signature = MD5Util.md5Encrypt(signature);
- signature = MD5Util.md5Encrypt(userName + ":" + firstRes.getRealm() + ":" + signature);
- signature = MD5Util.md5Encrypt(signature + ":" + firstRes.getRandomKey());
-
- SecondReq secondReq = new SecondReq();
- secondReq.setIpAddress(ip);
- secondReq.setEncryptType(firstRes.getEncryptType());
- secondReq.setSignature(signature);
- secondReq.setRandomKey(firstRes.getRandomKey());
- secondReq.setClientType(clientType);
- secondReq.setUserName(userName);
-
- HttpEntity<String> secondEntity = new HttpEntity<>(objectMapper.writeValueAsString(secondReq), httpHeaders);
- ResponseEntity<String> secondResEntity = restTemplate.postForEntity(url + reqUrl, secondEntity, String.class);
- HttpHeaders deviceHeaders = new HttpHeaders();
- deviceHeaders.add("X-Subject-Token", objectMapper.readTree(secondResEntity.getBody()).get("token").textValue());
- HttpEntity<Object> deviceEntity = new HttpEntity<>(deviceHeaders);
- ResponseEntity<String> exchange = restTemplate.exchange(url + deviceUrl + "/" + code, HttpMethod.GET, deviceEntity, String.class);
- String channelId = objectMapper.readTree(objectMapper.readTree(objectMapper.readTree(exchange.getBody()).get("encoderUnit").toString()).get("channels").get(0).toString()).get("channelId").textValue();
- ResponseEntity<String> monitorReq = restTemplate.exchange(url + monitorUrl + channelId, HttpMethod.GET, deviceEntity, String.class);
- return objectMapper.readTree(monitorReq.getBody()).get("url").textValue();
+ ArtemisConfig config = new ArtemisConfig();
+ config.setHost(HOST); // 浠g悊API缃戝叧nginx鏈嶅姟鍣╥p绔彛
+ config.setAppKey(APP_KEY); // 绉橀挜appkey
+ config.setAppSecret(APP_SECRET);// 绉橀挜appSecret
+ final String getSecurityApi = ARTEMIS_PATH + "/api/video/v1/presets/searches"; // 鎺ュ彛璺緞
+ Map<String, String> path = new HashMap<String, String>(2) {
+ {
+ put("https://", getSecurityApi);
+ }
+ };
+ Map<String, String> head = new HashMap<String, String>(2) { //get璇锋眰鐨刪ead鍙傛暟
+ {
+ put("headpost", "sky-test");
+ }
+ };
+ Map<String, String> query = new HashMap<String, String>(2) { //get璇锋眰鐨刪ead鍙傛暟
+ {
+ put("domainId", "0");
+ }
+ };
+ JSONObject jsonBody = new JSONObject();
+ jsonBody.put("cameraIndexCode", code);
+ String body = jsonBody.toString();
+ //鍙傛暟鏍规嵁鎺ュ彛瀹為檯鎯呭喌璁剧疆
+ HttpResponse result = ArtemisHttpUtil.doPostStringImgArtemis(config, path, body, query, null, "application/json", head);
+ System.out.println("娴峰悍瀹屾垚璇锋眰-getKHPresets");
+ try {
+ String strResult = EntityUtils.toString(result.getEntity());
+ System.out.println("娴峰悍杩斿洖缁撴灉-getKHPresets锛�" + strResult);
+ HttpResponseResult responseResult = com.alibaba.fastjson.JSONObject.parseObject(strResult, HttpResponseResult.class);
+ if ("0".equals(responseResult.getCode())) {
+ com.alibaba.fastjson.JSONObject jsonObject = responseResult.getData();
+ String url = jsonObject.getString("url");
+ return url;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return "";
}
}
--
Gitblit v1.8.0