|
|
@@ -0,0 +1,125 @@
|
|
|
+import java.io.File;
|
|
|
+import java.io.IOException;
|
|
|
+import java.nio.file.FileVisitResult;
|
|
|
+import java.nio.file.FileVisitor;
|
|
|
+import java.nio.file.Files;
|
|
|
+import java.nio.file.Path;
|
|
|
+import java.nio.file.attribute.BasicFileAttributes;
|
|
|
+import java.time.Duration;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.Set;
|
|
|
+import java.util.concurrent.ScheduledExecutorService;
|
|
|
+import java.util.concurrent.ScheduledThreadPoolExecutor;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author reghao
|
|
|
+ * @date 2025-12-18 13:43:47
|
|
|
+ */
|
|
|
+public class RtmpFileCleaner {
|
|
|
+ static ScheduledExecutorService scheduler = new ScheduledThreadPoolExecutor(1);
|
|
|
+ static Set set = Set.of("22", "23", "00", "01", "02", "03", "04", "05", "06", "07");
|
|
|
+
|
|
|
+ static void test() {
|
|
|
+ LocalDateTime now = LocalDateTime.now();
|
|
|
+ String filename = "cam204-1765896327_20251216_224527.flv";
|
|
|
+ String[] strArr = filename.replace(".flv", "").split("_");
|
|
|
+ String date = strArr[1];
|
|
|
+ String time = strArr[2];
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd HHmmss");
|
|
|
+ LocalDateTime localDateTime = LocalDateTime.parse(date + " " + time, formatter);
|
|
|
+
|
|
|
+ String hour = time.substring(0, 2);
|
|
|
+ if (set.contains(hour)) {
|
|
|
+ }
|
|
|
+
|
|
|
+ Duration duration = Duration.between(localDateTime, now);
|
|
|
+ long result = duration.getSeconds() - 3600L*12;
|
|
|
+ System.out.println(result);
|
|
|
+ }
|
|
|
+
|
|
|
+ public static void main(String[] args) {
|
|
|
+ String baseDir = "/opt/data/ngxflv/rtmp";
|
|
|
+ scheduler.scheduleAtFixedRate(new CleanerTask(baseDir), 0, 8, TimeUnit.HOURS);
|
|
|
+ }
|
|
|
+
|
|
|
+ static class CleanerTask implements Runnable {
|
|
|
+ private final String baseDir;
|
|
|
+ private LocalDateTime now;
|
|
|
+
|
|
|
+ public CleanerTask(String baseDir) {
|
|
|
+ this.baseDir = baseDir;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ now = LocalDateTime.now();
|
|
|
+ try {
|
|
|
+ walkDir(Path.of(baseDir));
|
|
|
+ } catch (IOException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ System.out.printf("%s RtmpFileCleaner task completed.\n", now);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void walkDir(Path path) throws IOException {
|
|
|
+ Files.walkFileTree(path, new FileVisitor<Path>() {
|
|
|
+ @Override
|
|
|
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
|
|
|
+ return FileVisitResult.CONTINUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
|
|
|
+ try {
|
|
|
+ process(file.toFile());
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return FileVisitResult.CONTINUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public FileVisitResult visitFileFailed(Path file, IOException exc) throws IOException {
|
|
|
+ return FileVisitResult.CONTINUE;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
|
|
|
+ return FileVisitResult.CONTINUE;
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ private void process(File file) {
|
|
|
+ String filename = file.getName();
|
|
|
+ String[] strArr = filename.replace(".flv", "").split("_");
|
|
|
+ String date = strArr[1];
|
|
|
+ String time = strArr[2];
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMdd HHmmss");
|
|
|
+ LocalDateTime localDateTime = LocalDateTime.parse(date + " " + time, formatter);
|
|
|
+
|
|
|
+ LocalDateTime current = LocalDateTime.now();
|
|
|
+ String hour = time.substring(0, 2);
|
|
|
+ if (set.contains(hour)) {
|
|
|
+ if (file.delete()) {
|
|
|
+ System.out.printf("%s Deleting file %s\n", current, file.getAbsolutePath());
|
|
|
+ } else {
|
|
|
+ System.out.printf("%s Deleting file %s failed\n", current, file.getAbsolutePath());
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Duration duration = Duration.between(localDateTime, now);
|
|
|
+ long result = duration.getSeconds() - 3600L*24;
|
|
|
+ if (result > 0) {
|
|
|
+ if (file.delete()) {
|
|
|
+ System.out.printf("%s Deleting file %s\n", current, file.getAbsolutePath());
|
|
|
+ } else {
|
|
|
+ System.out.printf("%s Deleting file %s failed\n", current, file.getAbsolutePath());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|