Commit f3e2bf1e24548b30d0d0471b769cd74fe88fe921
1 parent
43c6122d
添加接口
Showing
9 changed files
with
332 additions
and
18 deletions
.gitignore
0 → 100644
| 1 | +/.idea/ |
pom.xml
| @@ -14,6 +14,7 @@ | @@ -14,6 +14,7 @@ | ||
| 14 | <description></description> | 14 | <description></description> |
| 15 | <properties> | 15 | <properties> |
| 16 | <java.version>1.8</java.version> | 16 | <java.version>1.8</java.version> |
| 17 | +<!-- <pagehelper.version>5.2.0</pagehelper.version>--> | ||
| 17 | </properties> | 18 | </properties> |
| 18 | 19 | ||
| 19 | <repositories> | 20 | <repositories> |
| @@ -60,6 +61,12 @@ | @@ -60,6 +61,12 @@ | ||
| 60 | <version>1.2.73</version> | 61 | <version>1.2.73</version> |
| 61 | </dependency> | 62 | </dependency> |
| 62 | 63 | ||
| 64 | +<!-- <dependency>--> | ||
| 65 | +<!-- <groupId>com.github.pagehelper</groupId>--> | ||
| 66 | +<!-- <artifactId>pagehelper-spring-boot-starter</artifactId>--> | ||
| 67 | +<!-- <version>1.2.10</version>--> | ||
| 68 | +<!-- </dependency>--> | ||
| 69 | + | ||
| 63 | <dependency> | 70 | <dependency> |
| 64 | <groupId>org.springframework.boot</groupId> | 71 | <groupId>org.springframework.boot</groupId> |
| 65 | <artifactId>spring-boot-starter-test</artifactId> | 72 | <artifactId>spring-boot-starter-test</artifactId> |
src/main/java/top/panll/assist/config/TaskConfig.java
0 → 100644
| 1 | +package top.panll.assist.config; | ||
| 2 | + | ||
| 3 | +import org.slf4j.Logger; | ||
| 4 | +import org.slf4j.LoggerFactory; | ||
| 5 | +import org.springframework.beans.factory.annotation.Autowired; | ||
| 6 | +import org.springframework.context.annotation.Configuration; | ||
| 7 | +import org.springframework.scheduling.annotation.EnableScheduling; | ||
| 8 | +import org.springframework.scheduling.annotation.Scheduled; | ||
| 9 | +import top.panll.assist.service.VideoFileService; | ||
| 10 | + | ||
| 11 | +import java.io.File; | ||
| 12 | +import java.text.ParseException; | ||
| 13 | +import java.text.SimpleDateFormat; | ||
| 14 | +import java.time.LocalDateTime; | ||
| 15 | +import java.util.Calendar; | ||
| 16 | +import java.util.Date; | ||
| 17 | +import java.util.List; | ||
| 18 | + | ||
| 19 | +@Configuration | ||
| 20 | +@EnableScheduling | ||
| 21 | +public class TaskConfig { | ||
| 22 | + | ||
| 23 | + private final static Logger logger = LoggerFactory.getLogger(TaskConfig.class); | ||
| 24 | + | ||
| 25 | + @Autowired | ||
| 26 | + private VideoFileService videoFileService; | ||
| 27 | + | ||
| 28 | + private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); | ||
| 29 | + | ||
| 30 | + @Scheduled(cron = "0 0 0 * * ?") | ||
| 31 | + private void configureTasks() { | ||
| 32 | + logger.info("录像过期自检任务执行"); | ||
| 33 | + List<File> appList = videoFileService.getAppList(); | ||
| 34 | + Calendar calendar = Calendar.getInstance(); | ||
| 35 | + calendar.add(Calendar.DATE, - 7); | ||
| 36 | + Date monday = calendar.getTime(); | ||
| 37 | + if (appList != null && appList.size() > 0) { | ||
| 38 | + for (File appFile : appList) { | ||
| 39 | + List<File> streamList = videoFileService.getStreamList(appFile.getName()); | ||
| 40 | + if (streamList != null && streamList.size() > 0) { | ||
| 41 | + for (File streamFile : streamList) { | ||
| 42 | + File[] recordDateFileList = streamFile.listFiles(); | ||
| 43 | + if (recordDateFileList != null && recordDateFileList.length > 0) { | ||
| 44 | + for (File recordDateFile : recordDateFileList) { | ||
| 45 | + try { | ||
| 46 | + Date fileDaye = simpleDateFormat.parse(recordDateFile.getName()); | ||
| 47 | + if (fileDaye.before(monday)){ | ||
| 48 | + logger.debug("移除文件[{}]", recordDateFile.getAbsolutePath()); | ||
| 49 | + recordDateFile.delete(); | ||
| 50 | + } | ||
| 51 | + } catch (ParseException e) { | ||
| 52 | + logger.error("无法格式化[{}]为日期, 直接移除", recordDateFile.getName()); | ||
| 53 | + recordDateFile.delete(); | ||
| 54 | + } | ||
| 55 | + } | ||
| 56 | + } | ||
| 57 | + if (streamFile.listFiles().length == 0) { | ||
| 58 | + streamFile.delete(); | ||
| 59 | + } | ||
| 60 | + } | ||
| 61 | + } | ||
| 62 | + if (appFile.listFiles().length == 0) { | ||
| 63 | + appFile.delete(); | ||
| 64 | + } | ||
| 65 | + } | ||
| 66 | + } | ||
| 67 | + } | ||
| 68 | +} |
src/main/java/top/panll/assist/controller/RecordController.java
| @@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired; | @@ -6,6 +6,7 @@ import org.springframework.beans.factory.annotation.Autowired; | ||
| 6 | import org.springframework.web.bind.annotation.*; | 6 | import org.springframework.web.bind.annotation.*; |
| 7 | import top.panll.assist.controller.bean.WVPResult; | 7 | import top.panll.assist.controller.bean.WVPResult; |
| 8 | import top.panll.assist.service.VideoFileService; | 8 | import top.panll.assist.service.VideoFileService; |
| 9 | +import top.panll.assist.utils.PageInfo; | ||
| 9 | 10 | ||
| 10 | import java.io.File; | 11 | import java.io.File; |
| 11 | import java.text.ParseException; | 12 | import java.text.ParseException; |
| @@ -13,6 +14,7 @@ import java.text.SimpleDateFormat; | @@ -13,6 +14,7 @@ import java.text.SimpleDateFormat; | ||
| 13 | import java.util.ArrayList; | 14 | import java.util.ArrayList; |
| 14 | import java.util.Date; | 15 | import java.util.Date; |
| 15 | import java.util.List; | 16 | import java.util.List; |
| 17 | +import java.util.Map; | ||
| 16 | 18 | ||
| 17 | @CrossOrigin | 19 | @CrossOrigin |
| 18 | @RestController | 20 | @RestController |
| @@ -26,14 +28,35 @@ public class RecordController { | @@ -26,14 +28,35 @@ public class RecordController { | ||
| 26 | 28 | ||
| 27 | private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); | 29 | private SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| 28 | 30 | ||
| 31 | + | ||
| 32 | + /** | ||
| 33 | + * 获取app文件夹列表 | ||
| 34 | + * @return | ||
| 35 | + */ | ||
| 36 | + @GetMapping(value = "/list") | ||
| 37 | + @ResponseBody | ||
| 38 | + public WVPResult<PageInfo<Map<String, String>>> getList(@RequestParam int page, | ||
| 39 | + @RequestParam int count){ | ||
| 40 | + WVPResult<PageInfo<Map<String, String>>> result = new WVPResult<>(); | ||
| 41 | + List<Map<String, String>> appList = videoFileService.getList(); | ||
| 42 | + result.setCode(0); | ||
| 43 | + result.setMsg("success"); | ||
| 44 | + | ||
| 45 | + PageInfo<Map<String, String>> stringPageInfo = new PageInfo<>(appList); | ||
| 46 | + stringPageInfo.startPage(page, count); | ||
| 47 | + result.setData(stringPageInfo); | ||
| 48 | + return result; | ||
| 49 | + } | ||
| 50 | + | ||
| 29 | /** | 51 | /** |
| 30 | * 获取app文件夹列表 | 52 | * 获取app文件夹列表 |
| 31 | * @return | 53 | * @return |
| 32 | */ | 54 | */ |
| 33 | @GetMapping(value = "/app/list") | 55 | @GetMapping(value = "/app/list") |
| 34 | @ResponseBody | 56 | @ResponseBody |
| 35 | - public WVPResult<List<String>> getAppList(){ | ||
| 36 | - WVPResult<List<String>> result = new WVPResult<>(); | 57 | + public WVPResult<PageInfo<String>> getAppList(@RequestParam int page, |
| 58 | + @RequestParam int count){ | ||
| 59 | + WVPResult<PageInfo<String>> result = new WVPResult<>(); | ||
| 37 | List<String> resultData = new ArrayList<>(); | 60 | List<String> resultData = new ArrayList<>(); |
| 38 | List<File> appList = videoFileService.getAppList(); | 61 | List<File> appList = videoFileService.getAppList(); |
| 39 | for (File file : appList) { | 62 | for (File file : appList) { |
| @@ -41,7 +64,10 @@ public class RecordController { | @@ -41,7 +64,10 @@ public class RecordController { | ||
| 41 | } | 64 | } |
| 42 | result.setCode(0); | 65 | result.setCode(0); |
| 43 | result.setMsg("success"); | 66 | result.setMsg("success"); |
| 44 | - result.setData(resultData); | 67 | + |
| 68 | + PageInfo<String> stringPageInfo = new PageInfo<>(resultData); | ||
| 69 | + stringPageInfo.startPage(page, count); | ||
| 70 | + result.setData(stringPageInfo); | ||
| 45 | return result; | 71 | return result; |
| 46 | } | 72 | } |
| 47 | 73 | ||
| @@ -51,8 +77,10 @@ public class RecordController { | @@ -51,8 +77,10 @@ public class RecordController { | ||
| 51 | */ | 77 | */ |
| 52 | @GetMapping(value = "/stream/list") | 78 | @GetMapping(value = "/stream/list") |
| 53 | @ResponseBody | 79 | @ResponseBody |
| 54 | - public WVPResult<List<String>> getStreamList(@RequestParam String app ){ | ||
| 55 | - WVPResult<List<String>> result = new WVPResult<>(); | 80 | + public WVPResult<PageInfo<String>> getStreamList(@RequestParam int page, |
| 81 | + @RequestParam int count, | ||
| 82 | + @RequestParam String app ){ | ||
| 83 | + WVPResult<PageInfo<String>> result = new WVPResult<>(); | ||
| 56 | List<String> resultData = new ArrayList<>(); | 84 | List<String> resultData = new ArrayList<>(); |
| 57 | if (app == null) { | 85 | if (app == null) { |
| 58 | result.setCode(400); | 86 | result.setCode(400); |
| @@ -65,7 +93,43 @@ public class RecordController { | @@ -65,7 +93,43 @@ public class RecordController { | ||
| 65 | } | 93 | } |
| 66 | result.setCode(0); | 94 | result.setCode(0); |
| 67 | result.setMsg("success"); | 95 | result.setMsg("success"); |
| 68 | - result.setData(resultData); | 96 | + PageInfo<String> stringPageInfo = new PageInfo<>(resultData); |
| 97 | + stringPageInfo.startPage(page, count); | ||
| 98 | + result.setData(stringPageInfo); | ||
| 99 | + return result; | ||
| 100 | + } | ||
| 101 | + | ||
| 102 | + /** | ||
| 103 | + * 获取日期文件夹列表 | ||
| 104 | + * @return | ||
| 105 | + */ | ||
| 106 | + @GetMapping(value = "/date/list") | ||
| 107 | + @ResponseBody | ||
| 108 | + public WVPResult<PageInfo<String>> getDateList(@RequestParam int page, | ||
| 109 | + @RequestParam int count, | ||
| 110 | + @RequestParam String app, | ||
| 111 | + @RequestParam String stream ){ | ||
| 112 | + WVPResult<PageInfo<String>> result = new WVPResult<>(); | ||
| 113 | + List<String> resultData = new ArrayList<>(); | ||
| 114 | + if (app == null) { | ||
| 115 | + result.setCode(400); | ||
| 116 | + result.setMsg("app不能为空"); | ||
| 117 | + return result; | ||
| 118 | + }; | ||
| 119 | + if (stream == null) { | ||
| 120 | + result.setCode(400); | ||
| 121 | + result.setMsg("stream不能为空"); | ||
| 122 | + return result; | ||
| 123 | + } | ||
| 124 | + List<File> dateList = videoFileService.getDateList(app, stream); | ||
| 125 | + for (File file : dateList) { | ||
| 126 | + resultData.add(file.getName()); | ||
| 127 | + } | ||
| 128 | + result.setCode(0); | ||
| 129 | + result.setMsg("success"); | ||
| 130 | + PageInfo<String> stringPageInfo = new PageInfo<>(resultData); | ||
| 131 | + stringPageInfo.startPage(page, count); | ||
| 132 | + result.setData(stringPageInfo); | ||
| 69 | return result; | 133 | return result; |
| 70 | } | 134 | } |
| 71 | 135 | ||
| @@ -75,13 +139,15 @@ public class RecordController { | @@ -75,13 +139,15 @@ public class RecordController { | ||
| 75 | */ | 139 | */ |
| 76 | @GetMapping(value = "/file/list") | 140 | @GetMapping(value = "/file/list") |
| 77 | @ResponseBody | 141 | @ResponseBody |
| 78 | - public WVPResult<List<String>> getRecordList(@RequestParam String app, | ||
| 79 | - @RequestParam String stream, | ||
| 80 | - @RequestParam String startTime, | ||
| 81 | - @RequestParam String endTime | 142 | + public WVPResult<PageInfo<String>> getRecordList(@RequestParam int page, |
| 143 | + @RequestParam int count, | ||
| 144 | + @RequestParam String app, | ||
| 145 | + @RequestParam String stream, | ||
| 146 | + @RequestParam String startTime, | ||
| 147 | + @RequestParam String endTime | ||
| 82 | ){ | 148 | ){ |
| 83 | 149 | ||
| 84 | - WVPResult<List<String>> result = new WVPResult<>(); | 150 | + WVPResult<PageInfo<String>> result = new WVPResult<>(); |
| 85 | // TODO 暂时开始时间与结束时间为必传, 后续可不传或只传其一 | 151 | // TODO 暂时开始时间与结束时间为必传, 后续可不传或只传其一 |
| 86 | List<String> recordList = new ArrayList<>(); | 152 | List<String> recordList = new ArrayList<>(); |
| 87 | try { | 153 | try { |
| @@ -102,7 +168,9 @@ public class RecordController { | @@ -102,7 +168,9 @@ public class RecordController { | ||
| 102 | } | 168 | } |
| 103 | result.setCode(0); | 169 | result.setCode(0); |
| 104 | result.setMsg("success"); | 170 | result.setMsg("success"); |
| 105 | - result.setData(recordList); | 171 | + PageInfo<String> stringPageInfo = new PageInfo<>(recordList); |
| 172 | + stringPageInfo.startPage(page, count); | ||
| 173 | + result.setData(stringPageInfo); | ||
| 106 | } catch (ParseException e) { | 174 | } catch (ParseException e) { |
| 107 | logger.error("错误的开始时间[{}]或结束时间[{}]", startTime, endTime); | 175 | logger.error("错误的开始时间[{}]或结束时间[{}]", startTime, endTime); |
| 108 | result.setCode(400); | 176 | result.setCode(400); |
src/main/java/top/panll/assist/dto/UserSettings.java
| @@ -9,6 +9,9 @@ public class UserSettings { | @@ -9,6 +9,9 @@ public class UserSettings { | ||
| 9 | @Value("${userSettings.record}") | 9 | @Value("${userSettings.record}") |
| 10 | private String record; | 10 | private String record; |
| 11 | 11 | ||
| 12 | + @Value("${userSettings.recordDay}") | ||
| 13 | + private int recordDay; | ||
| 14 | + | ||
| 12 | @Value("${userSettings.ffmpeg}") | 15 | @Value("${userSettings.ffmpeg}") |
| 13 | private String ffmpeg; | 16 | private String ffmpeg; |
| 14 | 17 | ||
| @@ -38,4 +41,12 @@ public class UserSettings { | @@ -38,4 +41,12 @@ public class UserSettings { | ||
| 38 | public void setFfprobe(String ffprobe) { | 41 | public void setFfprobe(String ffprobe) { |
| 39 | this.ffprobe = ffprobe; | 42 | this.ffprobe = ffprobe; |
| 40 | } | 43 | } |
| 44 | + | ||
| 45 | + public int getRecordDay() { | ||
| 46 | + return recordDay; | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + public void setRecordDay(int recordDay) { | ||
| 50 | + this.recordDay = recordDay; | ||
| 51 | + } | ||
| 41 | } | 52 | } |
src/main/java/top/panll/assist/service/VideoFileService.java
| 1 | package top.panll.assist.service; | 1 | package top.panll.assist.service; |
| 2 | 2 | ||
| 3 | +import com.alibaba.fastjson.JSON; | ||
| 3 | import net.bramp.ffmpeg.FFprobe; | 4 | import net.bramp.ffmpeg.FFprobe; |
| 4 | import net.bramp.ffmpeg.probe.FFmpegProbeResult; | 5 | import net.bramp.ffmpeg.probe.FFmpegProbeResult; |
| 5 | import net.bramp.ffmpeg.progress.Progress; | 6 | import net.bramp.ffmpeg.progress.Progress; |
| @@ -8,7 +9,6 @@ import org.slf4j.LoggerFactory; | @@ -8,7 +9,6 @@ import org.slf4j.LoggerFactory; | ||
| 8 | import org.springframework.beans.factory.annotation.Autowired; | 9 | import org.springframework.beans.factory.annotation.Autowired; |
| 9 | import org.springframework.context.annotation.Bean; | 10 | import org.springframework.context.annotation.Bean; |
| 10 | import org.springframework.data.redis.core.StringRedisTemplate; | 11 | import org.springframework.data.redis.core.StringRedisTemplate; |
| 11 | -import org.springframework.data.redis.listener.RedisMessageListenerContainer; | ||
| 12 | import org.springframework.stereotype.Service; | 12 | import org.springframework.stereotype.Service; |
| 13 | import org.springframework.util.DigestUtils; | 13 | import org.springframework.util.DigestUtils; |
| 14 | import top.panll.assist.config.RedisUtil; | 14 | import top.panll.assist.config.RedisUtil; |
| @@ -40,8 +40,10 @@ public class VideoFileService { | @@ -40,8 +40,10 @@ public class VideoFileService { | ||
| 40 | 40 | ||
| 41 | private ThreadPoolExecutor processThreadPool; | 41 | private ThreadPoolExecutor processThreadPool; |
| 42 | 42 | ||
| 43 | + private SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); | ||
| 43 | 44 | ||
| 44 | - @Bean("iniThreadPool") | 45 | + |
| 46 | + @Bean("threadPoolExecutor") | ||
| 45 | private ThreadPoolExecutor iniThreadPool() { | 47 | private ThreadPoolExecutor iniThreadPool() { |
| 46 | 48 | ||
| 47 | int processThreadNum = Runtime.getRuntime().availableProcessors() * 10; | 49 | int processThreadNum = Runtime.getRuntime().availableProcessors() * 10; |
| @@ -57,7 +59,9 @@ public class VideoFileService { | @@ -57,7 +59,9 @@ public class VideoFileService { | ||
| 57 | File recordFile = new File(userSettings.getRecord()); | 59 | File recordFile = new File(userSettings.getRecord()); |
| 58 | if (recordFile != null) { | 60 | if (recordFile != null) { |
| 59 | File[] files = recordFile.listFiles(); | 61 | File[] files = recordFile.listFiles(); |
| 60 | - return Arrays.asList(files); | 62 | + List<File> result = Arrays.asList(files); |
| 63 | + Collections.sort(result); | ||
| 64 | + return result; | ||
| 61 | }else { | 65 | }else { |
| 62 | return null; | 66 | return null; |
| 63 | } | 67 | } |
| @@ -67,7 +71,9 @@ public class VideoFileService { | @@ -67,7 +71,9 @@ public class VideoFileService { | ||
| 67 | File appFile = new File(userSettings.getRecord() + File.separator + app); | 71 | File appFile = new File(userSettings.getRecord() + File.separator + app); |
| 68 | if (appFile != null) { | 72 | if (appFile != null) { |
| 69 | File[] files = appFile.listFiles(); | 73 | File[] files = appFile.listFiles(); |
| 70 | - return Arrays.asList(files); | 74 | + List<File> result = Arrays.asList(files); |
| 75 | + Collections.sort(result); | ||
| 76 | + return result; | ||
| 71 | }else { | 77 | }else { |
| 72 | return null; | 78 | return null; |
| 73 | } | 79 | } |
| @@ -107,6 +113,36 @@ public class VideoFileService { | @@ -107,6 +113,36 @@ public class VideoFileService { | ||
| 107 | } | 113 | } |
| 108 | } | 114 | } |
| 109 | 115 | ||
| 116 | + public List<Map<String, String>> getList() { | ||
| 117 | + | ||
| 118 | + List<Map<String, String>> result = new ArrayList<>(); | ||
| 119 | + | ||
| 120 | + List<File> appList = getAppList(); | ||
| 121 | + if (appList != null && appList.size() > 0) { | ||
| 122 | + for (File appFile : appList) { | ||
| 123 | + List<File> streamList = getStreamList(appFile.getName()); | ||
| 124 | + if (streamList != null && streamList.size() > 0) { | ||
| 125 | + for (File streamFile : streamList) { | ||
| 126 | + Map<String, String> data = new HashMap<>(); | ||
| 127 | + data.put("app", appFile.getName()); | ||
| 128 | + data.put("stream", streamFile.getName()); | ||
| 129 | + | ||
| 130 | +// BasicFileAttributes bAttributes = null; | ||
| 131 | +// try { | ||
| 132 | +// bAttributes = Files.readAttributes(streamFile.toPath(), | ||
| 133 | +// BasicFileAttributes.class); | ||
| 134 | +// } catch (IOException e) { | ||
| 135 | +// e.printStackTrace(); | ||
| 136 | +// } | ||
| 137 | +// data.put("time", simpleDateFormat.format(new Date(bAttributes.lastModifiedTime().toMillis()))); | ||
| 138 | + result.add(data); | ||
| 139 | + } | ||
| 140 | + } | ||
| 141 | + } | ||
| 142 | + } | ||
| 143 | + return result; | ||
| 144 | + } | ||
| 145 | + | ||
| 110 | /** | 146 | /** |
| 111 | * 获取制定推流的指定时间段内的推流 | 147 | * 获取制定推流的指定时间段内的推流 |
| 112 | * @param app | 148 | * @param app |
| @@ -212,14 +248,37 @@ public class VideoFileService { | @@ -212,14 +248,37 @@ public class VideoFileService { | ||
| 212 | data.put("percentage", "1"); | 248 | data.put("percentage", "1"); |
| 213 | data.put("recordFile", result); | 249 | data.put("recordFile", result); |
| 214 | redisUtil.set(app + "_" + stream + "_" + temp, data, 3*60*60); | 250 | redisUtil.set(app + "_" + stream + "_" + temp, data, 3*60*60); |
| 215 | - stringRedisTemplate.convertAndSend("topic_mergeorcut_end", data); | 251 | + stringRedisTemplate.convertAndSend("topic_mergeorcut_end", JSON.toJSONString(data)); |
| 216 | }else { | 252 | }else { |
| 217 | data.put("percentage", percentage + ""); | 253 | data.put("percentage", percentage + ""); |
| 218 | redisUtil.set(app + "_" + stream + "_" + temp, data, 3*60*60); | 254 | redisUtil.set(app + "_" + stream + "_" + temp, data, 3*60*60); |
| 219 | - stringRedisTemplate.convertAndSend("topic_mergeorcut_continue", data); | 255 | + stringRedisTemplate.convertAndSend("topic_mergeorcut_continue", JSON.toJSONString(data)); |
| 220 | } | 256 | } |
| 221 | }); | 257 | }); |
| 222 | }); | 258 | }); |
| 223 | return temp; | 259 | return temp; |
| 224 | } | 260 | } |
| 261 | + | ||
| 262 | + | ||
| 263 | + public List<File> getDateList(String app, String stream) { | ||
| 264 | + File recordFile = new File(userSettings.getRecord()); | ||
| 265 | + File streamFile = new File(recordFile.getAbsolutePath() + File.separator + app + File.separator + stream); | ||
| 266 | + if (!streamFile.exists()) { | ||
| 267 | + logger.warn("获取[app: {}, stream: {}]的视频时未找到目录: {}", app, stream, stream); | ||
| 268 | + return null; | ||
| 269 | + } | ||
| 270 | + File[] dateFiles = streamFile.listFiles(); | ||
| 271 | + List<File> dateFileList = Arrays.asList(dateFiles); | ||
| 272 | + dateFileList.sort((File f1, File f2)->{ | ||
| 273 | + int sortResult = 0; | ||
| 274 | + SimpleDateFormat formatterForDate = new SimpleDateFormat("yyyy-MM-dd"); | ||
| 275 | + try { | ||
| 276 | + sortResult = formatterForDate.parse(f1.getName()).compareTo(formatterForDate.parse(f2.getName())); | ||
| 277 | + } catch (ParseException e) { | ||
| 278 | + e.printStackTrace(); | ||
| 279 | + } | ||
| 280 | + return sortResult; | ||
| 281 | + }); | ||
| 282 | + return dateFileList; | ||
| 283 | + } | ||
| 225 | } | 284 | } |
src/main/java/top/panll/assist/utils/PageInfo.java
0 → 100644
| 1 | +package top.panll.assist.utils; | ||
| 2 | + | ||
| 3 | +import java.util.ArrayList; | ||
| 4 | +import java.util.List; | ||
| 5 | + | ||
| 6 | +public class PageInfo<T> { | ||
| 7 | + //当前页 | ||
| 8 | + private int pageNum; | ||
| 9 | + //每页的数量 | ||
| 10 | + private int pageSize; | ||
| 11 | + //当前页的数量 | ||
| 12 | + private int size; | ||
| 13 | + //总页数 | ||
| 14 | + private int pages; | ||
| 15 | + //总数 | ||
| 16 | + private int total; | ||
| 17 | + | ||
| 18 | + private List<T> resultData; | ||
| 19 | + | ||
| 20 | + private List<T> list; | ||
| 21 | + | ||
| 22 | + public PageInfo(List<T> resultData) { | ||
| 23 | + this.resultData = resultData; | ||
| 24 | + } | ||
| 25 | + | ||
| 26 | + public void startPage(int page, int count) { | ||
| 27 | + if (page <= 0) page = 1; | ||
| 28 | + this.pageNum = page; | ||
| 29 | + this.pageSize = count; | ||
| 30 | + this.total = resultData.size(); | ||
| 31 | + | ||
| 32 | + this.pages = total%count == 0 ? total/count : total/count + 1; | ||
| 33 | + int fromIndx = (page - 1) * count; | ||
| 34 | + if ( fromIndx > this.total - 1) { | ||
| 35 | + this.list = new ArrayList<>(); | ||
| 36 | + this.size = 0; | ||
| 37 | + return; | ||
| 38 | + } | ||
| 39 | + | ||
| 40 | + int toIndx = page * count; | ||
| 41 | + if (toIndx > this.total) { | ||
| 42 | + toIndx = this.total; | ||
| 43 | + } | ||
| 44 | + this.list = this.resultData.subList(fromIndx, toIndx); | ||
| 45 | + this.size = this.list.size(); | ||
| 46 | + } | ||
| 47 | + | ||
| 48 | + public int getPageNum() { | ||
| 49 | + return pageNum; | ||
| 50 | + } | ||
| 51 | + | ||
| 52 | + public void setPageNum(int pageNum) { | ||
| 53 | + this.pageNum = pageNum; | ||
| 54 | + } | ||
| 55 | + | ||
| 56 | + public int getPageSize() { | ||
| 57 | + return pageSize; | ||
| 58 | + } | ||
| 59 | + | ||
| 60 | + public void setPageSize(int pageSize) { | ||
| 61 | + this.pageSize = pageSize; | ||
| 62 | + } | ||
| 63 | + | ||
| 64 | + public int getSize() { | ||
| 65 | + return size; | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + public void setSize(int size) { | ||
| 69 | + this.size = size; | ||
| 70 | + } | ||
| 71 | + | ||
| 72 | + public int getPages() { | ||
| 73 | + return pages; | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + public void setPages(int pages) { | ||
| 77 | + this.pages = pages; | ||
| 78 | + } | ||
| 79 | + | ||
| 80 | + public int getTotal() { | ||
| 81 | + return total; | ||
| 82 | + } | ||
| 83 | + | ||
| 84 | + public void setTotal(int total) { | ||
| 85 | + this.total = total; | ||
| 86 | + } | ||
| 87 | + | ||
| 88 | + public List<T> getList() { | ||
| 89 | + return list; | ||
| 90 | + } | ||
| 91 | + | ||
| 92 | + public void setList(List<T> list) { | ||
| 93 | + this.list = list; | ||
| 94 | + } | ||
| 95 | +} |
src/main/resources/application-dev.yml
| @@ -30,11 +30,14 @@ server: | @@ -30,11 +30,14 @@ server: | ||
| 30 | userSettings: | 30 | userSettings: |
| 31 | # [必选 ] zlm配置的录像路径 | 31 | # [必选 ] zlm配置的录像路径 |
| 32 | record: /media/lin/Server/ZLMediaKit/dev/ZLMediaKit/release/linux/Debug/www/record | 32 | record: /media/lin/Server/ZLMediaKit/dev/ZLMediaKit/release/linux/Debug/www/record |
| 33 | + # [可选 ] 录像保存时长(单位: 天)每天晚12点自动对过期文件执行清理 | ||
| 34 | + recordDay: 7 | ||
| 33 | # [必选 ] ffmpeg路径 | 35 | # [必选 ] ffmpeg路径 |
| 34 | ffmpeg: /usr/bin/ffmpeg | 36 | ffmpeg: /usr/bin/ffmpeg |
| 35 | # [必选 ] ffprobe路径, 一般安装ffmpeg就会自带, 一般跟ffmpeg在同一目录,用于查询文件的信息 | 37 | # [必选 ] ffprobe路径, 一般安装ffmpeg就会自带, 一般跟ffmpeg在同一目录,用于查询文件的信息 |
| 36 | ffprobe: /usr/bin/ffprobe | 38 | ffprobe: /usr/bin/ffprobe |
| 37 | 39 | ||
| 40 | + | ||
| 38 | # [可选] 日志配置, 一般不需要改 | 41 | # [可选] 日志配置, 一般不需要改 |
| 39 | logging: | 42 | logging: |
| 40 | file: | 43 | file: |
src/main/resources/application-local.yml
| @@ -30,6 +30,8 @@ server: | @@ -30,6 +30,8 @@ server: | ||
| 30 | userSettings: | 30 | userSettings: |
| 31 | # [必选 ] zlm配置的录像路径 | 31 | # [必选 ] zlm配置的录像路径 |
| 32 | record: /media/lin/Server/ZLMediaKit/dev/ZLMediaKit/release/linux/Debug/www/record | 32 | record: /media/lin/Server/ZLMediaKit/dev/ZLMediaKit/release/linux/Debug/www/record |
| 33 | + # [可选 ] 录像保存时长(单位: 天)每天晚12点自动对过期文件执行清理 | ||
| 34 | + recordDay: 7 | ||
| 33 | # [必选 ] ffmpeg路径 | 35 | # [必选 ] ffmpeg路径 |
| 34 | ffmpeg: /usr/bin/ffmpeg | 36 | ffmpeg: /usr/bin/ffmpeg |
| 35 | # [必选 ] ffprobe路径, 一般安装ffmpeg就会自带, 一般跟ffmpeg在同一目录,用于查询文件的信息 | 37 | # [必选 ] ffprobe路径, 一般安装ffmpeg就会自带, 一般跟ffmpeg在同一目录,用于查询文件的信息 |