| | |
| | | **/ |
| | | @SneakyThrows |
| | | public String getVideo(String code, String scheme, Integer subType) { |
| | | System.out.println("开始视频请求:" + code); |
| | | String clientType = "winpc"; |
| | | String reqUrl = "/videoService/accounts/authorize"; |
| | | String deviceUrl = "/videoService/devicesManager/devices"; |
| | | // System.out.println("开始视频请求:" + code); |
| | | try { |
| | | |
| | | 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="; |
| | | 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) { |
| | | |
| | | } |
| | | }); |
| | | 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); |
| | | return "获取地址失败,请检查code值"; |
| | | } |
| | | 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); |
| | | // 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(); |
| | | } |
| | | } |