| | |
| | | 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; |
| | |
| | | // 初始化输出文件目录(使用应用外部存储目录) |
| | | outputFileDirectory = getExternalFilesDir(null).getAbsolutePath(); |
| | | Timber.d("Output file directory: %s", outputFileDirectory); |
| | | |
| | | // 清理过期的H264文件 |
| | | cleanupExpiredH264Files(H264_FILE_RETENTION_DAYS); |
| | | } |
| | | |
| | | @Override |
| | |
| | | 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()); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 从文件创建资源信息(如果文件在时间范围内) |