From 82258b502bb39bd7621617d79c59d2973fd4b378 Mon Sep 17 00:00:00 2001 From: whycxzp <glperry@163.com> Date: 星期四, 09 一月 2025 11:29:24 +0800 Subject: [PATCH] 摄像头视频流相关接口 --- src/main/java/com/whyc/util/HttpUtil.java | 40 +++ src/main/resources/config/application-dev.yml | 36 +++ src/main/java/com/whyc/listener/ApplicationListener.java | 67 ++++++ src/main/java/com/whyc/constant/YamlProperties.java | 10 src/main/java/com/whyc/config/StaticResourceConfig.java | 2 src/main/java/com/whyc/dto/Mp4FileDTO.java | 25 ++ src/main/java/com/whyc/service/VideoService.java | 139 +++++++++-- src/main/resources/config/application-prod.yml | 42 +++ src/main/java/com/whyc/controller/VideoController.java | 35 ++- src/main/java/com/whyc/util/FileUtil.java | 30 ++ src/main/java/com/whyc/dto/Response4Http.java | 112 ++++++++++ src/main/resources/config/application.yml | 4 src/main/java/com/whyc/schedule/VideoScheduleService.java | 82 ++++++ 13 files changed, 557 insertions(+), 67 deletions(-) diff --git a/src/main/java/com/whyc/config/StaticResourceConfig.java b/src/main/java/com/whyc/config/StaticResourceConfig.java index d157bf9..64ff8db 100644 --- a/src/main/java/com/whyc/config/StaticResourceConfig.java +++ b/src/main/java/com/whyc/config/StaticResourceConfig.java @@ -27,6 +27,8 @@ //杩欎釜鏄彲琛岀殑,瑙f瀽鐨勬椂鍊檖ath涓�*.html,鏍¢獙璺緞admin涓嬫槸鍚﹀瓨鍦� registry.addResourceHandler("/**").addResourceLocations("classpath:/META-INF/resources/"); + //褰曞儚瑙嗛mp4鏂囦欢璺緞杞负http url + registry.addResourceHandler("/video/**").addResourceLocations("file:/battery_system/video_system/ZLMediaKit/www/record/rtp/"); super.addResourceHandlers(registry); } diff --git a/src/main/java/com/whyc/constant/YamlProperties.java b/src/main/java/com/whyc/constant/YamlProperties.java index b2c8633..8e6b398 100644 --- a/src/main/java/com/whyc/constant/YamlProperties.java +++ b/src/main/java/com/whyc/constant/YamlProperties.java @@ -3,6 +3,8 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; +import java.util.List; + /** * Yaml閰嶇疆鍙傛暟 瀹炰綋绫� */ @@ -56,6 +58,8 @@ public static String publicKey; public static String privateKey; + + public static List<String> videoStreamIds; @Value("${custom.rsa.publicKey}") public void setPublicKey(String publicKey) { @@ -172,6 +176,8 @@ public void setFtpPassword(String ftpPassword){ YamlProperties.ftpPassword=ftpPassword; }*/ - - + @Value("${video.streamIds}") + public void setVideoStreamIds(List<String> videoStreamIds) { + YamlProperties.videoStreamIds = videoStreamIds; + } } diff --git a/src/main/java/com/whyc/controller/VideoController.java b/src/main/java/com/whyc/controller/VideoController.java index 0ab209f..39d5f5f 100644 --- a/src/main/java/com/whyc/controller/VideoController.java +++ b/src/main/java/com/whyc/controller/VideoController.java @@ -1,14 +1,22 @@ package com.whyc.controller; import com.whyc.dto.Response; +import com.whyc.dto.Response4Http; import com.whyc.service.VideoService; import io.swagger.annotations.Api; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; +/** + * 鎽勫儚澶寸殑瀛樺偍閫昏緫鍒嗕负濡備笅姝ラ: + * 1.绋嬪簭鍚姩鏃�,鑾峰彇鎵�鏈夌殑瑙嗛娴乮d,骞秓penRtpServer鏉ュ紑鍚祦,鎵цstartRecord鏉ュ惎鍔ㄥ綍鍒�,鑷姩1涓皬鏃朵繚瀛樹竴娆″綍鍍�. + * 2.褰曞儚鐨勪繚瀛樿矾寰勬槧灏勫埌http url涓�,鍙�氳繃http鑾峰彇mp4 + * 3.姣忕閽熸娴嬫墍鏈夌殑瑙嗛娴� 鏄惁 寮�鍚姸鎬佹槸鍚﹀紓甯�,濡傛灉寮傚父,閲嶆柊寮�鍚祦 + */ @RestController @RequestMapping("video") @Api(tags = "鎽勫儚澶磋棰�") @@ -17,21 +25,24 @@ @Autowired private VideoService service; - @RequestMapping("getVideoStreamIds") - public Response<List> getVideoStreamIds() { - List<String> videoStreamIds = service.getVideoStreamIds(); - return new Response<List>().set(1, videoStreamIds, "鑾峰彇鎽勫儚澶磋棰戞祦鎴愬姛"); + @GetMapping("getVideoStreamIds") + public Response4Http getVideoStreamIds() { + return service.getVideoStreamIds(); } - @RequestMapping("startRecord") - public Response<String> startRecord(String streamId) { - service.startRecord(streamId); - return new Response<String>().set(1, "寮�濮嬪綍鍒惰棰戞祦鎴愬姛"); + @GetMapping("startRecord") + public Response4Http startRecord(String streamId) { + return service.startRecord(streamId); } - @RequestMapping("stopRecord") - public Response<String> stopRecord(String streamId) { - service.stopRecord(streamId); - return new Response<String>().set(1, "鍋滄褰曞埗瑙嗛娴佹垚鍔�"); + @GetMapping("stopRecord") + public Response4Http<String> stopRecord(String streamId) { + return service.stopRecord(streamId); } + + @GetMapping("getMp4RecordFile") + public Response4Http<String> getMp4RecordFile(String streamId,String period){ + return service.getMp4RecordFile(streamId,period); + } + } diff --git a/src/main/java/com/whyc/dto/Mp4FileDTO.java b/src/main/java/com/whyc/dto/Mp4FileDTO.java new file mode 100644 index 0000000..d21b2ff --- /dev/null +++ b/src/main/java/com/whyc/dto/Mp4FileDTO.java @@ -0,0 +1,25 @@ +package com.whyc.dto; + +import java.util.List; + +public class Mp4FileDTO { + + private List<String> paths; + private String rootPath; + + public List<String> getPaths() { + return paths; + } + + public void setPaths(List<String> paths) { + this.paths = paths; + } + + public String getRootPath() { + return rootPath; + } + + public void setRootPath(String rootPath) { + this.rootPath = rootPath; + } +} diff --git a/src/main/java/com/whyc/dto/Response4Http.java b/src/main/java/com/whyc/dto/Response4Http.java new file mode 100644 index 0000000..1904b6f --- /dev/null +++ b/src/main/java/com/whyc/dto/Response4Http.java @@ -0,0 +1,112 @@ +package com.whyc.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.ToString; + +import java.io.Serializable; + +/** + * 瑙嗛api鎺ュ彛鏁版嵁鍝嶅簲瀵硅薄 + */ +@ApiModel +@ToString +public class Response4Http<T> implements Serializable { + + private Integer code; + @ApiModelProperty + private T data; + private T data2; + private String msg; + private Boolean status; + private Boolean result; + + public Response4Http<T> setCode(Integer code) { + this.code = code; + return this; + } + + public Response4Http<T> setData(T data) { + this.data = data; + return this; + } + + public Response4Http<T> set(Integer code, T data) { + this.code = code; + this.data = data; + return this; + } + + public Response4Http<T> set(Integer code, T data, String msg) { + this.code = code; + this.data = data; + this.msg = msg; + return this; + } + + public Response4Http<T> set(Integer code) { + this.code = code; + return this; + } + + public Response4Http<T> setII(Integer code, String msg) { + this.code = code; + this.msg = msg; + return this; + } + + public Response4Http<T> setII(Integer code, T data, T data2, String msg) { + this.code = code; + this.msg = msg; + this.data = data; + this.data2 = data2; + return this; + } + + public Response4Http setStatus(int code, T data, Boolean status) { + this.code = code; + this.data = data; + this.status = status; + return this; + } + + public Integer getCode() { + return code; + } + + public T getData() { + return data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public T getData2() { + return data2; + } + + public void setData2(T data2) { + this.data2 = data2; + } + + public Boolean getStatus() { + return status; + } + + public void setStatus(Boolean status) { + this.status = status; + } + + public Boolean getResult() { + return result; + } + + public void setResult(Boolean result) { + this.result = result; + } +} diff --git a/src/main/java/com/whyc/listener/ApplicationListener.java b/src/main/java/com/whyc/listener/ApplicationListener.java new file mode 100644 index 0000000..e7260f9 --- /dev/null +++ b/src/main/java/com/whyc/listener/ApplicationListener.java @@ -0,0 +1,67 @@ +//package com.whyc.listener; +// +//import com.whyc.constant.YamlProperties; +//import com.whyc.dto.Response; +//import com.whyc.service.VideoService; +//import org.springframework.beans.factory.annotation.Autowired; +// +//import javax.servlet.ServletContext; +//import javax.servlet.ServletContextEvent; +//import javax.servlet.ServletContextListener; +//import javax.servlet.annotation.WebListener; +//import java.util.List; +// +//import static java.lang.Thread.sleep; +// +///** +// * 搴旂敤鍚姩鏃跺垵濮嬪寲 +// * 搴旂敤鍏抽棴鏃堕攢姣� +// */ +//@WebListener +//public class ApplicationListener implements ServletContextListener { +// +// @Autowired +// private VideoService videoService; +// +// /** +// * 1.鍒濆鍖�,寮�鍚棰戞祦骞跺惎鍔ㄥ綍鍍忓瓨鍌� +// * @param servletContextEvent +// */ +// @Override +// public void contextInitialized(ServletContextEvent servletContextEvent) { +// ServletContext application = servletContextEvent.getServletContext(); +// //鑰冭檻鎰忓鎯呭喌:绐佺劧绋嬪簭姝绘満鎴栬�呯數鑴戞柇鐢甸噸鍚�,闇�瑕佸欢鏃跺惎鍔ㄥ綍鍍�,鍥犱负瑙嗛鎺ㄦ祦鏈嶅姟杩樻湭瀹屾垚. +// try { +// //寤舵椂20s +// sleep(20000); +// } catch (InterruptedException e) { +// throw new RuntimeException(e); +// } +// +// +// //1.褰曞儚瀛樺偍 +// //鑾峰彇鎵�鏈夌殑娴乮d +// List<String> videoStreamIds = YamlProperties.videoStreamIds; +// //寮�鍚綍鍍忓瓨鍌� +// videoStreamIds.forEach(streamId -> { +// //娣诲姞娴� +// Response<String> response = videoService.addStreamProxy(streamId); +// +// //TODO 鍒ゆ柇鏄惁鍦ㄥ綍鍍�,涓嶅湪鐨勮瘽,寮�鍚綍鍍� +// +// Response response2 = videoService.startRecord(streamId); +// if(!(response2.getCode() ==1 && ((boolean) response2.getData()))){ +// System.out.println("娴乮d涓�:"+streamId+"鐨勪俊鎭�:"+response2.getMsg()); +// }else{ +// System.out.println("娴乮d涓�:"+streamId+"鐨勪俊鎭�:"+response2.getData()); +// } +// }); +// +// } +// +// @Override +// public void contextDestroyed(ServletContextEvent servletContextEvent) { +// //鍏抽棴鎵�鏈夋祦 +// //videoService.closeStreams(); +// } +//} diff --git a/src/main/java/com/whyc/schedule/VideoScheduleService.java b/src/main/java/com/whyc/schedule/VideoScheduleService.java index e10fd1d..450e814 100644 --- a/src/main/java/com/whyc/schedule/VideoScheduleService.java +++ b/src/main/java/com/whyc/schedule/VideoScheduleService.java @@ -1,11 +1,23 @@ package com.whyc.schedule; +import com.whyc.constant.YamlProperties; +import com.whyc.dto.Response; +import com.whyc.dto.Response4Http; import com.whyc.factory.ThreadPoolExecutorFactory; import com.whyc.service.VideoService; +import com.whyc.util.DateUtil; +import com.whyc.util.FileUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; +import org.springframework.stereotype.Service; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Date; +import java.util.List; @EnableScheduling @Component @@ -14,19 +26,71 @@ @Autowired private VideoService service; - /**鍑屾櫒0鐐规墽琛屼竴娆�,褰曞埗瑙嗛娴�*/ - @Scheduled(cron = "0 0 0 * * ? ") - public void getAndSaveB247(){ + /** + * 1.鐩戞帶褰曞埗,棰戞涓�2s. + * 2.瑙嗛褰曞埗鐨勫垽鏂�昏緫鏄�: + * 鏄惁瀛樺湪娴� + * 鏄惁鍦ㄥ綍鍒� + * 3.鑰冭檻鎰忓鎯呭喌:绐佺劧绋嬪簭姝绘満鎴栬�呯數鑴戞柇鐢甸噸鍚�,闇�瑕佸欢鏃跺惎鍔ㄥ綍鍍�,鍥犱负瑙嗛鎺ㄦ祦鏈嶅姟杩樻湭瀹屾垚,寤舵椂20s寮�濮嬫娴� + * + * */ + //@Scheduled(cron = "0/2 * * * * ? ") + @Scheduled(fixedRate = 2000,initialDelay = 20000) + public void startRecordAndCheck(){ ThreadPoolExecutorFactory.getPoolExecutor().execute(()->{ - //service.getAndSaveB247(); + List<String> videoStreamIds = YamlProperties.videoStreamIds; + Response4Http streamIdsOnlineRes = service.getVideoStreamIds(); + List<String> streamIdsOnline = (List<String>) streamIdsOnlineRes.getData2()==null?new ArrayList<>():(List<String>) streamIdsOnlineRes.getData2(); + + if(streamIdsOnlineRes.getCode() == 1 && ((boolean) streamIdsOnlineRes.getData())){ + videoStreamIds.forEach(streamId->{ + if(!streamIdsOnline.contains(streamId)){ //娴佷笉瀛樺湪 + //娣诲姞娴� + Response4Http<String> response = service.addStreamProxy(streamId); + + Response4Http response2 = service.startRecord(streamId); + if(!(response2.getCode() ==1 && ((boolean) response2.getData()))){ + System.out.println("娴乮d涓�:"+streamId+"鐨勪俊鎭�:"+response2.getMsg()); + }else{ + System.out.println("娴乮d涓�:"+streamId+"鐨勪俊鎭�:"+response2.getData()); + } + }else{ //娴佸瓨鍦� + //妫�鏌ユ槸鍚﹀湪褰曞埗鐘舵�� + Response4Http recordingRes = service.isRecording(streamId); + if(!(boolean)recordingRes.getData()){ //涓嶅湪褰曞埗,鍒欒繘琛屽綍鍒� + Response4Http response2 = service.startRecord(streamId); + if(!(response2.getCode() ==1 && ((boolean) response2.getData()))){ + System.out.println("娴乮d涓�:"+streamId+"鐨勪俊鎭�:"+response2.getMsg()); + }else{ + System.out.println("娴乮d涓�:"+streamId+"鐨勪俊鎭�:"+response2.getData()); + } + } + } + }); + } }); } - /**鍑屾櫒0鐐�0鍒�2绉掓墽琛屼竴娆�,鍋滄涓婃鐨勫綍鍒惰棰戞祦*/ - @Scheduled(cron = "2 0 0 * * ? ") - public void getAndSaveA250(){ - ThreadPoolExecutorFactory.getPoolExecutor().execute(()->{ - //service.getAndSaveA250(); + /** + * 褰曞儚淇濇寔3澶� + */ + @Scheduled(cron= "0 0 3 * * ?") + public void recordRecycle(){ + System.out.println("-----------鎵ц褰曞儚寰幆----------:"+ DateUtil.YYYY_MM_DD_HH_MM_SS.format(new Date())); + //鏂囦欢澶硅矾寰� /battery_system/video_system/Debug/www/record/rtp/{streamId}/{day}} + List<String> videoStreamIds = YamlProperties.videoStreamIds; + videoStreamIds.forEach(streamId ->{ + String dirPath = "/battery_system/video_system/Debug/www/record/rtp/"+streamId; + File dirFile = new File(dirPath); + String[] dirList = dirFile.list(); + List<String> dirList2 = Arrays.asList(dirList); + + for (int i = 0; i < dirList2.size()-3; i++) { + //鎸夐『搴忓垹闄�,淇濈暀鏈�鍚�3涓猟ay鐨勮棰戝綍鍍忔枃浠跺す + String dirPath2Remove = dirPath + File.separator + dirList2.get(i); + File dir2Remove = new File(dirPath2Remove); + FileUtil.deleteFile(dir2Remove); + } }); } diff --git a/src/main/java/com/whyc/service/VideoService.java b/src/main/java/com/whyc/service/VideoService.java index 789e7f9..ea306b4 100644 --- a/src/main/java/com/whyc/service/VideoService.java +++ b/src/main/java/com/whyc/service/VideoService.java @@ -1,13 +1,17 @@ package com.whyc.service; +import com.google.gson.internal.LinkedTreeMap; +import com.whyc.dto.Mp4FileDTO; import com.whyc.dto.Response; -import com.whyc.util.ActionUtil; +import com.whyc.dto.Response4Http; import com.whyc.util.HttpUtil; import org.springframework.stereotype.Service; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static com.whyc.util.HttpUtil.urlEncode; @@ -21,70 +25,143 @@ * 鑾峰彇瑙嗛娴乮d * @return */ - public List<String> getVideoStreamIds() { + public Response4Http getVideoStreamIds() { + Response4Http responseResult = new Response4Http<>(); + Map<String, Object> params = new HashMap<>();//缁勫悎鍙傛暟 - params.put("pageIndex", 1); - params.put("pageSize", 1); + params.put("secret", "TWSYFgYJOQWB4ftgeYut8DW4wbs7pQnj"); String queryParams = urlEncode(params); - String httpUrl ="http://192.168.10.133:9092/index/api/getMediaList"; + String httpUrl ="http://127.0.0.1:9092/index/api/getMediaList"; Response response = HttpUtil.doGet(httpUrl, queryParams); Integer httpResponseCode = response.getCode(); String responseJson = (String) response.getData(); if(httpResponseCode == 1) { //璇锋眰鎴愬姛 - Response responseHttp = HttpUtil.getGson().fromJson(responseJson, Response.class); - if(responseHttp.getCode() == 1) { - //TODO 闇�瑕佸疄闄呰皟璇曪紝鐩墠杩斿洖鐨勬暟鎹粨鏋勬湭纭畾 - return HttpUtil.getGson().fromJson(responseHttp.getData().toString(), List.class); - }else{ - return null; + Response4Http responseHttp = HttpUtil.getGson().fromJson(responseJson, Response4Http.class); + if(responseHttp.getCode() == 0 ) { //鎺ュ彛杩斿洖鐘舵�佺爜涓烘垚鍔� + if(responseHttp.getData()!=null) { + List<LinkedTreeMap<String, Object>> list = (List) responseHttp.getData(); + Stream<LinkedTreeMap<String, Object>> linkedTreeMapStream = list.stream().filter(item -> ((String) item.get("schema")).equals("rtsp")); + return responseResult.setII(1,true,linkedTreeMapStream.map(item -> (String) item.get("stream")).collect(Collectors.toList()),null); + }{ + return responseResult.set(1,true,"鏈煡璇㈠埌宸插紑鍚殑娴�"); + } + }else{ //鎺ュ彛杩斿洖鐘舵�佺爜涓哄け璐�,鑾峰彇msg + return responseResult.set(1,false,responseHttp.getMsg()); } - }else{ - return null; + }else{ //璇锋眰澶辫触 + return responseResult.set(0,response.getData(),response.getMsg()); } } - public void startRecord(String streamId){ + /** + * 1涓皬鏃跺綍鍒朵负瑙嗛褰曞埗鍗曚釜鏃堕暱 : + * max_second = 1*60*60 + * + * @param streamId + * @return + */ + public Response4Http startRecord(String streamId){ Map<String, Object> params = new HashMap<>();//缁勫悎鍙傛暟 params.put("secret", "TWSYFgYJOQWB4ftgeYut8DW4wbs7pQnj"); params.put("type", 1); params.put("vhost", "__defaultVhost__"); params.put("app", "rtp"); params.put("stream", streamId); - String queryParams = urlEncode(params); - String httpUrl ="http://192.168.10.133:9092/index/api/startRecord"; - Response response = HttpUtil.doGet(httpUrl, queryParams); - Integer code = response.getCode(); - String responseJson = (String) response.getData(); - if(code == 1) { //璇锋眰鎴愬姛 - Response responseHttp = HttpUtil.getGson().fromJson(responseJson, Response.class); - if(responseHttp.getCode() == 0 && responseHttp.getMsg().equals("success")) { //璇锋眰鎴愬姛 - }else{ - System.out.println(responseHttp.getMsg()); - } - } + params.put("max_second",3600); + String httpUrl ="http://127.0.0.1:9092/index/api/startRecord"; + //Response response = HttpUtil.doGet(httpUrl, queryParams); + //Integer code = response.getCode(); + //String responseJson = (String) response.getData(); + return HttpUtil.doGet(httpUrl,params); } - public void stopRecord(String streamId){ + public Response4Http stopRecord(String streamId){ Map<String, Object> params = new HashMap<>();//缁勫悎鍙傛暟 params.put("secret", "TWSYFgYJOQWB4ftgeYut8DW4wbs7pQnj"); params.put("type", 1); params.put("vhost", "__defaultVhost__"); params.put("app", "rtp"); params.put("stream", streamId); - String queryParams = urlEncode(params); - String httpUrl ="http://192.168.10.133:9092/index/api/stopRecord"; + String httpUrl ="http://127.0.0.1:9092/index/api/stopRecord"; + return HttpUtil.doGet(httpUrl,params); + /*String queryParams = urlEncode(params); + String httpUrl ="http://127.0.0.1:9092/index/api/stopRecord"; Response response = HttpUtil.doGet(httpUrl, queryParams); Integer code = response.getCode(); String responseJson = (String) response.getData(); if(code == 1) { //璇锋眰鎴愬姛 - Response responseHttp = HttpUtil.getGson().fromJson(responseJson, Response.class); + Response4Http responseHttp = HttpUtil.getGson().fromJson(responseJson, Response4Http.class); if(responseHttp.getCode() == 0 && responseHttp.getMsg().equals("success")) { //璇锋眰鎴愬姛 }else{ System.out.println(responseHttp.getMsg()); } - } + }*/ } + /** + * getMp4RecordFile + */ + public Response4Http<String> getMp4RecordFile(String streamId, String period){ + Map<String, Object> params = new HashMap<>();//缁勫悎鍙傛暟 + params.put("secret", "TWSYFgYJOQWB4ftgeYut8DW4wbs7pQnj"); + params.put("type", 1); + params.put("vhost", "__defaultVhost__"); + params.put("app", "rtp"); + params.put("stream", streamId); + params.put("period",period); + String httpUrl ="http://127.0.0.1:9092/index/api/getMp4RecordFile"; + Response4Http response4Http = HttpUtil.doGet(httpUrl, params); + //data鏍煎紡涓�:"data" : { + // "paths" : [ "2020-01-25", "2020-01-24" ], + // "rootPath" : "/www/record/live/ss/" + // } + String dataStr = (String) response4Http.getData2(); + Mp4FileDTO mp4FileDTO = HttpUtil.getGson().fromJson(dataStr, Mp4FileDTO.class); + response4Http.setData2(mp4FileDTO); + return response4Http; + + /*if(code == 1) { //璇锋眰鎴愬姛 + Response responseHttp = HttpUtil.getGson().fromJson(responseJson, Response.class); + if(responseHttp.getCode() == 0 && responseHttp.getMsg().equals("success")) { //璇锋眰鎴愬姛 + System.out.println(responseHttp.getData()); + return responseJson; + }else{ + System.out.println(responseHttp.getMsg()); + } + }*/ + + } + + public Response4Http<String> openRtpServer(String streamId) { + HashMap<String, Object> paramMap = new HashMap<>(); + paramMap.put("port", 0); + paramMap.put("tcp_mode", 1); + paramMap.put("stream_id", streamId); + paramMap.put("secret", "TWSYFgYJOQWB4ftgeYut8DW4wbs7pQnj"); + return HttpUtil.doGet("http://127.0.0.1:9092/index/api/openRtpServer", paramMap); + } + + public Response4Http<String> addStreamProxy(String streamId) { + HashMap<String, Object> paramMap = new HashMap<>(); + paramMap.put("vhost", "__defaultVhost__"); + paramMap.put("app", "rtp"); + paramMap.put("stream", streamId); + paramMap.put("url", "rtsp://127.0.0.1:554/rtp/"+streamId); + paramMap.put("secret", "TWSYFgYJOQWB4ftgeYut8DW4wbs7pQnj"); + return HttpUtil.doGet("http://127.0.0.1:9092/index/api/addStreamProxy", paramMap); + } + + public Response4Http isRecording(String streamId){ + Map<String, Object> params = new HashMap<>();//缁勫悎鍙傛暟 + params.put("secret", "TWSYFgYJOQWB4ftgeYut8DW4wbs7pQnj"); + params.put("type", 1); + params.put("vhost", "__defaultVhost__"); + params.put("app", "rtp"); + params.put("stream", streamId); + String httpUrl ="http://127.0.0.1:9092/index/api/isRecording"; + return HttpUtil.doGet(httpUrl, params); + } + } diff --git a/src/main/java/com/whyc/util/FileUtil.java b/src/main/java/com/whyc/util/FileUtil.java new file mode 100644 index 0000000..dfc3a08 --- /dev/null +++ b/src/main/java/com/whyc/util/FileUtil.java @@ -0,0 +1,30 @@ +package com.whyc.util; + +import java.io.File; + +public class FileUtil { + public static Boolean deleteFile(File file) { + //鍒ゆ柇鏂囦欢涓嶄负null鎴栨枃浠剁洰褰曞瓨鍦� + if (file == null || !file.exists()) { + System.out.println("鏂囦欢鍒犻櫎澶辫触,璇锋鏌ユ枃浠舵槸鍚﹀瓨鍦ㄤ互鍙婃枃浠惰矾寰勬槸鍚︽纭�"); + return false; + } + //鑾峰彇鐩綍涓嬪瓙鏂囦欢 + File[] files = file.listFiles(); + //閬嶅巻璇ョ洰褰曚笅鐨勬枃浠跺璞� + for (File f : files) { + //鍒ゆ柇瀛愮洰褰曟槸鍚﹀瓨鍦ㄥ瓙鐩綍,濡傛灉鏄枃浠跺垯鍒犻櫎 + if (f.isDirectory()) { + //閫掑綊鍒犻櫎鐩綍涓嬬殑鏂囦欢 + deleteFile(f); + } else { + //鏂囦欢鍒犻櫎 + f.delete(); + //鎵撳嵃鏂囦欢鍚� + } + } + //鏂囦欢澶瑰垹闄� + file.delete(); + return true; + } +} diff --git a/src/main/java/com/whyc/util/HttpUtil.java b/src/main/java/com/whyc/util/HttpUtil.java index c14a632..d3c6e54 100644 --- a/src/main/java/com/whyc/util/HttpUtil.java +++ b/src/main/java/com/whyc/util/HttpUtil.java @@ -4,6 +4,7 @@ import com.google.gson.GsonBuilder; import com.google.gson.JsonSyntaxException; import com.whyc.dto.Response; +import com.whyc.dto.Response4Http; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @@ -265,4 +266,43 @@ result = result.substring(0, result.lastIndexOf("&")); return result; } + + /** + * 鎵цGET璇锋眰,浼犲叆Map鍙傛暟鍜孶rl,鑾峰彇鍝嶅簲 + */ + public static Response4Http doGet(String httpUrl, Map<String, ?> params) { + Response4Http responseResult = new Response4Http<>(); + + String queryParams = urlEncode(params); + Response response = HttpUtil.doGet(httpUrl, queryParams); + Integer httpResponseCode = response.getCode(); + String responseJson = (String) response.getData(); + if(httpResponseCode == 1) { //璇锋眰鎴愬姛 + Response4Http responseHttp = HttpUtil.getGson().fromJson(responseJson, Response4Http.class); + if(responseHttp.getCode() == 0 ) { //鎺ュ彛杩斿洖鐘舵�佺爜涓烘垚鍔� + //杩斿洖淇℃伅鏈� data灞炴�� + if(responseHttp.getData()!=null) { + return responseResult.setII(1,true,responseHttp.getData(),null); + } + //杩斿洖淇℃伅鏈� status灞炴�� + else if(responseHttp.getStatus() !=null){ + return responseResult.setStatus(1,true,responseHttp.getStatus()); + } + //杩斿洖淇℃伅鏈� result灞炴�� + else if(responseHttp.getResult() !=null){ + responseResult.setResult(responseHttp.getResult()); + return responseResult.set(1,true); + } + else{ + return responseResult.set(1,true,"璇锋眰鎴愬姛涓旇繑鍥炴暟鎹甯�,鏃犳暟鎹俊鎭�"); + } + }else{ //鎺ュ彛杩斿洖鐘舵�佺爜涓哄け璐� + // 杩斿洖淇℃伅鏈� msg灞炴�� + return responseResult.set(1,false,responseHttp.getMsg()); + } + }else{ //璇锋眰澶辫触 + return responseResult.set(0,response.getData(),response.getMsg()); + } + + } } diff --git a/src/main/resources/config/application-dev.yml b/src/main/resources/config/application-dev.yml index f05f122..048c800 100644 --- a/src/main/resources/config/application-dev.yml +++ b/src/main/resources/config/application-dev.yml @@ -3,7 +3,7 @@ type: 1 #鏈嶅姟绔彛鍙� server: - port: 8088 + port: 8087 serverHeader: servlet: context-path: /br @@ -20,9 +20,14 @@ datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.highgo.jdbc.Driver - url: jdbc:highgo://192.168.10.183:5866/highgo?rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8 + url: jdbc:highgo://192.168.10.133:5866/highgo?rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8 username: sysdba - password: Lmx&8688139 + password: Fg001@HDW +# type: com.alibaba.druid.pool.DruidDataSource +# driver-class-name: com.mysql.cj.jdbc.Driver +# url: jdbc:mysql://localhost:3360/db_user?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true&useSSL=false +# username: root +# password: lmx8688139 maxIdel: 60 initialPoolSize: 2 minPoolSize: 5 @@ -86,3 +91,28 @@ defaultKey: ENC(KdXXhvt6v7BDw7MgsR4J1OgahZgjl3kEil10+147oGA=) iv: ENC(Gtzf6s+BRoC1iQsRLMswSlBDSMom0kWtx5+SMJgaVDg=) i18n: zh-CN +#瑙嗛娴佺殑id +video: + streamIds: + "34020000001110000001_34020000001320000001, + 34020000001110000001_34020000001320000002, + 34020000001110000001_34020000001320000003, + 34020000001110000002_34020000001320000001, + 34020000001110000002_34020000001320000002, + 34020000001110000002_34020000001320000003, + 34020000001320000001_34020000001320000001, + 34020000001320000001_34020000001320000002, + 34020000001320000002_34020000001320000001, + 34020000001320000002_34020000001320000002, + 34020000001320000003_34020000001320000001, + 34020000001320000003_34020000001320000002, + 34020000001320000004_34020000001320000001, + 34020000001320000004_34020000001320000002, + 34020000001320000005_34020000001320000001, + 34020000001320000005_34020000001320000002, + 34020000001320000006_34020000001320000001, + 34020000001320000006_34020000001320000002, + 34020000001320000007_34020000001320000001, + 34020000001320000007_34020000001320000002, + 34020000001320000008_34020000001320000001, + 34020000001320000008_34020000001320000002" \ No newline at end of file diff --git a/src/main/resources/config/application-prod.yml b/src/main/resources/config/application-prod.yml index 6255e2d..5107ed3 100644 --- a/src/main/resources/config/application-prod.yml +++ b/src/main/resources/config/application-prod.yml @@ -24,15 +24,18 @@ datasource: master: type: com.alibaba.druid.pool.DruidDataSource +# driver-class-name: com.mysql.cj.jdbc.Driver +# url: jdbc:mysql://localhost:3360/db_user?characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true&rewriteBatchedStatements=true&useSSL=false +# username: root +# password: lmx8688139 driver-class-name: com.highgo.jdbc.Driver - # url: jdbc:highgo://localhost:5866/highgo?rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8 - url: jdbc:highgo://192.168.10.183:5866/highgo?rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8 + url: jdbc:highgo://localhost:5866/highgo?rewriteBatchedStatements=true&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8 username: sysdba - password: Lmx&8688139 - db2: - type: com.alibaba.druid.pool.DruidDataSource - driver-class-name: org.sqlite.JDBC - url: jdbc:sqlite:E:\2杞欢涓嬭浇鍖匼easydarwin\EasyDarwin-windows-8.2.2-24031216\data\db\EasyDarwin.db?date_string_format=yyyy-MM-dd HH:mm:ss + password: Fg001@HDW +# db2: +# type: com.alibaba.druid.pool.DruidDataSource +# driver-class-name: org.sqlite.JDBC +# url: jdbc:sqlite:E:\2杞欢涓嬭浇鍖匼easydarwin\EasyDarwin-windows-8.2.2-24031216\data\db\EasyDarwin.db?date_string_format=yyyy-MM-dd HH:mm:ss # url: jdbc:sqlite:\2杞欢涓嬭浇鍖匼easydarwin\EasyDarwin-windows-8.2.2-24031216\data\db\EasyDarwin.db?date_string_format=yyyy-MM-dd HH:mm:ss maxIdel: 60 initialPoolSize: 2 @@ -97,4 +100,27 @@ defaultKey: ENC(KdXXhvt6v7BDw7MgsR4J1OgahZgjl3kEil10+147oGA=) iv: ENC(Gtzf6s+BRoC1iQsRLMswSlBDSMom0kWtx5+SMJgaVDg=) i18n: zh-CN - +video: + streamIds: + "34020000001110000001_34020000001320000001, + 34020000001110000001_34020000001320000002, + 34020000001110000001_34020000001320000003, + 34020000001110000002_34020000001320000001, + 34020000001110000002_34020000001320000002, + 34020000001110000002_34020000001320000003, + 34020000001320000001_34020000001320000001, + 34020000001320000001_34020000001320000002, + 34020000001320000002_34020000001320000001, + 34020000001320000002_34020000001320000002, + 34020000001320000003_34020000001320000001, + 34020000001320000003_34020000001320000002, + 34020000001320000004_34020000001320000001, + 34020000001320000004_34020000001320000002, + 34020000001320000005_34020000001320000001, + 34020000001320000005_34020000001320000002, + 34020000001320000006_34020000001320000001, + 34020000001320000006_34020000001320000002, + 34020000001320000007_34020000001320000001, + 34020000001320000007_34020000001320000002, + 34020000001320000008_34020000001320000001, + 34020000001320000008_34020000001320000002" \ No newline at end of file diff --git a/src/main/resources/config/application.yml b/src/main/resources/config/application.yml index 386ad18..1d3bd14 100644 --- a/src/main/resources/config/application.yml +++ b/src/main/resources/config/application.yml @@ -1,7 +1,7 @@ spring: profiles: - active: dev -# active: prod +# active: dev + active: prod # active: dev-mysql -- Gitblit v1.9.1