Dana
2025-12-03 25ac86fe6a8d26dddd41ba7b4a276e6309b1afad
app/src/main/java/com/anyun/h264/H264EncodeService.java
@@ -36,6 +36,7 @@
    private H264FileTransmitter h264FileTransmitter; // H264文件传输器
    private String outputFileDirectory; // H264文件输出目录
    private WatermarkInfo currentWatermarkInfo; // 当前水印信息
    private static final int H264_FILE_RETENTION_DAYS = 5; // 可根据需求调整为3或5天
    
    // 多进程支持:第二个摄像头的服务连接
    private IH264EncodeService camera2Service;
@@ -78,6 +79,9 @@
        // 初始化输出文件目录(使用应用外部存储目录)
        outputFileDirectory = getExternalFilesDir(null).getAbsolutePath();
        Timber.d("Output file directory: %s", outputFileDirectory);
        // 清理过期的H264文件
        cleanupExpiredH264Files(H264_FILE_RETENTION_DAYS);
    }
    
    @Override
@@ -793,6 +797,41 @@
            currentWatermarkInfo = null;
        }
    }
    /**
     * 删除超过保留期的H264文件
     */
    private void cleanupExpiredH264Files(int retentionDays) {
        if (outputFileDirectory == null) {
            Timber.w("cleanupExpiredH264Files: outputFileDirectory is null");
            return;
        }
        File dir = new File(outputFileDirectory);
        if (!dir.exists() || !dir.isDirectory()) {
            Timber.w("cleanupExpiredH264Files: directory invalid -> %s", outputFileDirectory);
            return;
        }
        long retentionMillis = TimeUnit.DAYS.toMillis(Math.max(1, retentionDays));
        long cutoffTime = System.currentTimeMillis() - retentionMillis;
        File[] files = dir.listFiles((d, name) -> name.toLowerCase(Locale.CHINA).endsWith(".h264"));
        if (files == null || files.length == 0) {
            return;
        }
        for (File file : files) {
            if (file.lastModified() < cutoffTime) {
                boolean deleted = file.delete();
                if (deleted) {
                    Timber.i("Deleted expired H264 file: %s", file.getAbsolutePath());
                } else {
                    Timber.w("Failed to delete expired H264 file: %s", file.getAbsolutePath());
                }
            }
        }
    }
    
    /**
     * 从文件创建资源信息(如果文件在时间范围内)