From d8c58a271f0d7a9dce864c028f243da6cf35df81 Mon Sep 17 00:00:00 2001
From: wl <173@qq.com>
Date: 星期三, 07 十二月 2022 12:42:35 +0800
Subject: [PATCH] feat: 添加视频地址获取APi
---
ycl-platform/src/main/java/com/ycl/controller/platformApi/AlarmController.java | 108 +++++++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 103 insertions(+), 5 deletions(-)
diff --git a/ycl-platform/src/main/java/com/ycl/controller/platformApi/AlarmController.java b/ycl-platform/src/main/java/com/ycl/controller/platformApi/AlarmController.java
index 00f1924..6730d52 100644
--- a/ycl-platform/src/main/java/com/ycl/controller/platformApi/AlarmController.java
+++ b/ycl-platform/src/main/java/com/ycl/controller/platformApi/AlarmController.java
@@ -1,17 +1,29 @@
package com.ycl.controller.platformApi;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.fasterxml.jackson.databind.ObjectMapper;
import com.ycl.api.CommonResult;
+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.AlarmParam;
import com.ycl.enums.common.ResultCode;
import com.ycl.service.video.IVideoAlarmReportService;
+import com.ycl.utils.MD5Util;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
+import lombok.SneakyThrows;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.http.*;
+import org.springframework.http.client.ClientHttpResponse;
+import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.client.DefaultResponseErrorHandler;
+import org.springframework.web.client.RestTemplate;
+
+import java.net.URI;
/**
* @author admin
@@ -20,6 +32,18 @@
@RestController
@RequestMapping("/API")
public class AlarmController {
+
+ @Value("${videoPoint.url}")
+ private String url;
+
+ @Value("${videoPoint.userName}")
+ private String userName;
+
+ @Value("${videoPoint.passWord}")
+ private String passWord;
+
+ @Value("${videoPoint.ip}")
+ private String ip;
private IVideoAlarmReportService videoAlarmReportService;
@@ -35,4 +59,78 @@
return new CommonResult(ResultCode.SUCCESS.getCode(), ResultCode.SUCCESS.getMessage());
}
-}
+ @GetMapping("/video")
+ @ApiOperation(value = "璁惧鑾峰彇鐩戞帶鍦板潃")
+ @SneakyThrows
+ public CommonResult getMonitorAddress(@RequestParam String code,
+ @RequestParam(required = false) Integer subType,
+ @RequestParam(required = false) String scheme) {
+
+ String clientType = "winpc";
+ String reqUrl = "/videoService/accounts/authorize";
+ String deviceUrl = "/videoService/devicesManager/devices";
+ if (subType == null) {
+ subType = 1;
+ }
+ if (StringUtils.isNotBlank(scheme)) {
+ scheme = "RTSP";
+ }
+ String 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) {
+
+ }
+ });
+ 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);
+ 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 CommonResult.successApi(objectMapper.readTree(monitorReq.getBody()).get("url"));
+ }
+}
\ No newline at end of file
--
Gitblit v1.8.0