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