From bfc959385fd59284fca3e417af217d02d80cb845 Mon Sep 17 00:00:00 2001
From: Dana <Dana_Lee1016@126.com>
Date: 星期二, 23 十二月 2025 13:26:33 +0800
Subject: [PATCH] 1.h264文件写入tfcard 2.tfcard/h264/20251223/h264_时间戳.h264
---
app/src/main/java/com/anyun/h264/H264EncodeService2.java | 69 +++++++++++++++++++++++++++++++++-
1 files changed, 66 insertions(+), 3 deletions(-)
diff --git a/app/src/main/java/com/anyun/h264/H264EncodeService2.java b/app/src/main/java/com/anyun/h264/H264EncodeService2.java
index 112824b..6f4c927 100644
--- a/app/src/main/java/com/anyun/h264/H264EncodeService2.java
+++ b/app/src/main/java/com/anyun/h264/H264EncodeService2.java
@@ -8,6 +8,7 @@
import com.anyun.h264.model.ResourceInfo;
import com.anyun.h264.model.WatermarkInfo;
+import com.anyun.h264.util.FileUtil;
import org.json.JSONException;
import org.json.JSONObject;
@@ -102,6 +103,7 @@
int height;
int framerate;
String simPhone;
+ boolean useTFCard = false; // 鏄惁浣跨敤TF鍗�
// 浠嶫SON瑙f瀽閰嶇疆
static EncodeConfig fromJson(String jsonConfig) throws JSONException {
@@ -114,6 +116,7 @@
config.ip = null;
config.port = 0;
config.simPhone = null;
+ config.useTFCard = false; // 榛樿涓嶄娇鐢═F鍗�
return config;
}
@@ -124,6 +127,7 @@
config.ip = json.optString("ip", null);
config.port = json.optInt("port", 0);
config.simPhone = json.optString("simPhone", null);
+ config.useTFCard = json.optBoolean("useTFCard", false);
return config;
}
@@ -216,10 +220,61 @@
}
/**
+ * 鑾峰彇杈撳嚭鏂囦欢鐩綍锛堟牴鎹畊seTFCard閰嶇疆锛�
+ * @param useTFCard 鏄惁浣跨敤TF鍗�
+ * @return 杈撳嚭鐩綍璺緞
+ */
+ private String getOutputFileDirectory(boolean useTFCard) {
+ if (useTFCard) {
+ // 浣跨敤TF鍗★細/sdcard/h264/褰撳墠鏃ユ湡/
+ try {
+ String storagePath = FileUtil.getStoragePath(this, true);
+ if (storagePath == null || storagePath.trim().isEmpty()) {
+ Timber.w("TF card storage path not available, fallback to app directory (camera2)");
+ return outputFileDirectory;
+ }
+
+ File externalStorage = new File(storagePath);
+ if (!externalStorage.exists()) {
+ Timber.w("TF card storage directory does not exist: %s, fallback to app directory (camera2)", storagePath);
+ return outputFileDirectory;
+ }
+
+ // 鑾峰彇褰撳墠鏃ユ湡锛堟牸寮忥細yyyyMMdd锛屽20250123锛�
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd", Locale.CHINA);
+ String dateDir = dateFormat.format(new Date());
+
+ // 鏋勫缓璺緞锛�/sdcard/h264/20250123/
+ File h264Dir = new File(externalStorage, "h264");
+ File dateDirFile = new File(h264Dir, dateDir);
+
+ // 鍒涘缓鐩綍锛堝鏋滀笉瀛樺湪锛�
+ if (!dateDirFile.exists()) {
+ boolean created = dateDirFile.mkdirs();
+ if (!created && !dateDirFile.exists()) {
+ Timber.e("Failed to create TF card directory: %s, fallback to app directory (camera2)", dateDirFile.getAbsolutePath());
+ return outputFileDirectory;
+ }
+ }
+
+ String tfCardPath = dateDirFile.getAbsolutePath();
+ Timber.d("Using TF card directory (camera2): %s", tfCardPath);
+ return tfCardPath;
+ } catch (Exception e) {
+ Timber.e(e, "Error getting TF card directory, fallback to app directory (camera2)");
+ return outputFileDirectory;
+ }
+ } else {
+ // 浣跨敤搴旂敤澶栭儴瀛樺偍鐩綍
+ return outputFileDirectory;
+ }
+ }
+
+ /**
* 鍚姩鏂囦欢缂栫爜妯″紡锛堝彧鍐欏叆鏂囦欢锛屼笉杩涜缃戠粶鎺ㄩ�侊級
*/
private int startFileEncode(EncodeConfig config) {
- Timber.d("Starting file encode mode (camera2)");
+ Timber.d("Starting file encode mode (camera2), useTFCard: %b", config != null ? config.useTFCard : false);
// 濡傛灉缂栫爜鍣ㄥ凡缁忓湪杩愯锛屽厛鍋滄
if (h264Encoder != null) {
@@ -238,9 +293,13 @@
int framerate = config != null && config.framerate > 0 ? config.framerate : DEFAULT_FRAME_RATE;
h264Encoder.setEncoderParams(width, height, framerate, DEFAULT_BITRATE);
+ // 鑾峰彇杈撳嚭鏂囦欢鐩綍锛堟牴鎹畊seTFCard閰嶇疆锛�
+ boolean useTFCard = config != null && config.useTFCard;
+ String outputDir = getOutputFileDirectory(useTFCard);
+
// 璁剧疆杈撳嚭鏂囦欢鐩綍锛圚264Encoder浼氳嚜鍔ㄧ鐞嗘枃浠跺垱寤猴紝姣忓垎閽熶竴涓枃浠讹級
// 浣跨敤涓�涓复鏃舵枃浠跺悕鏉ヨ缃洰褰曪紝H264Encoder浼氬湪鍒濆鍖栨椂鍒涘缓绗竴涓枃浠�
- File tempFile = new File(outputFileDirectory, "temp.h264");
+ File tempFile = new File(outputDir, "temp.h264");
h264Encoder.setOutputFile(tempFile.getAbsolutePath());
h264Encoder.setEnableFileOutput(true); // 鍚敤鏂囦欢杈撳嚭
@@ -299,9 +358,13 @@
int framerate = config != null && config.framerate > 0 ? config.framerate : DEFAULT_FRAME_RATE;
h264Encoder.setEncoderParams(width, height, framerate, DEFAULT_BITRATE);
+ // 鑾峰彇杈撳嚭鏂囦欢鐩綍锛堟牴鎹畊seTFCard閰嶇疆锛�
+ boolean useTFCard = config != null && config.useTFCard;
+ String outputDir = getOutputFileDirectory(useTFCard);
+
// 璁剧疆杈撳嚭鏂囦欢鐩綍锛圚264Encoder浼氳嚜鍔ㄧ鐞嗘枃浠跺垱寤猴紝姣忓垎閽熶竴涓枃浠讹級
// 浣跨敤涓�涓复鏃舵枃浠跺悕鏉ヨ缃洰褰曪紝H264Encoder浼氬湪鍒濆鍖栨椂鍒涘缓绗竴涓枃浠�
- File tempFile = new File(outputFileDirectory, "temp.h264");
+ File tempFile = new File(outputDir, "temp.h264");
h264Encoder.setOutputFile(tempFile.getAbsolutePath());
h264Encoder.setEnableFileOutput(true); // 鍚敤鏂囦欢杈撳嚭
--
Gitblit v1.8.0