From 3d3db1ddbf227749c2de72856669171a9345937e Mon Sep 17 00:00:00 2001
From: Dana <Dana_Lee1016@126.com>
Date: 星期一, 01 十二月 2025 11:32:00 +0800
Subject: [PATCH] 1.h264Encoder加上 日志写入文件 2.返回文件列表修改
---
app/src/main/java/com/anyun/h264/H264EncodeService.java | 40 +++++++++++++++-----
app/src/main/java/com/anyun/h264/H264Encoder.java | 65 ++++++++++++++++----------------
2 files changed, 63 insertions(+), 42 deletions(-)
diff --git a/app/src/main/java/com/anyun/h264/H264EncodeService.java b/app/src/main/java/com/anyun/h264/H264EncodeService.java
index d94997a..eab4a1f 100644
--- a/app/src/main/java/com/anyun/h264/H264EncodeService.java
+++ b/app/src/main/java/com/anyun/h264/H264EncodeService.java
@@ -536,12 +536,33 @@
*/
private ResourceInfo createResourceInfoFromFile(File file, Date startDate, Date endDate) {
try {
- // 浠庢枃浠跺悕鎴栨枃浠朵慨鏀规椂闂磋幏鍙栨枃浠舵椂闂�
- // 杩欓噷鍋囪鏂囦欢鍚嶅寘鍚椂闂存埑锛屾垨鑰呬娇鐢ㄦ枃浠朵慨鏀规椂闂�
- Date fileDate = new Date(file.lastModified());
+ // 浠庢枃浠跺悕涓彁鍙栨椂闂存埑锛堟牸寮忥細h264_1234567890123.h264锛�
+ String fileName = file.getName();
+ Date startTimeFromFileName = null;
+
+ if (fileName.startsWith("h264_") && fileName.endsWith(".h264")) {
+ try {
+ // 鎻愬彇鏂囦欢鍚嶄腑鐨勬椂闂存埑锛坔264_ 鍜� .h264 涔嬮棿鐨勯儴鍒嗭級
+ String timestampStr = fileName.substring(5, fileName.length() - 5); // 鍘绘帀 "h264_" 鍜� ".h264"
+ long timestamp = Long.parseLong(timestampStr);
+ startTimeFromFileName = new Date(timestamp);
+ } catch (NumberFormatException e) {
+ Timber.w("Failed to parse timestamp from filename: %s", fileName);
+ }
+ }
+
+ // 濡傛灉鏃犳硶浠庢枃浠跺悕瑙f瀽鏃堕棿鎴筹紝鍒欎娇鐢ㄦ枃浠朵慨鏀规椂闂翠綔涓哄紑濮嬫椂闂�
+ if (startTimeFromFileName == null) {
+ startTimeFromFileName = new Date(file.lastModified());
+ }
+
+ // 缁撴潫鏃堕棿浣跨敤鏂囦欢淇敼鏃堕棿
+ Date endTimeFromFile = new Date(file.lastModified());
// 妫�鏌ユ枃浠舵椂闂存槸鍚﹀湪鎸囧畾鑼冨洿鍐�
- if (fileDate.before(startDate) || fileDate.after(endDate)) {
+ // 寮�濮嬫椂闂村簲璇� >= startDate锛岀粨鏉熸椂闂村簲璇� <= endDate
+ // 濡傛灉鏂囦欢鐨勫紑濮嬫椂闂村湪鑼冨洿鍐咃紝鎴栬�呯粨鏉熸椂闂村湪鑼冨洿鍐咃紝鎴栬�呮枃浠舵椂闂磋寖鍥村寘鍚煡璇㈣寖鍥达紝鍒欏寘鍚鏂囦欢
+ if (startTimeFromFileName.after(endDate) || endTimeFromFile.before(startDate)) {
return null; // 涓嶅湪鏃堕棿鑼冨洿鍐�
}
@@ -551,13 +572,12 @@
// 閫昏緫閫氶亾鍙凤紙榛樿鍊硷紝瀹為檯搴斾粠閰嶇疆鑾峰彇锛�
resourceInfo.setLogicalChannelNumber((byte) 1);
- // 寮�濮嬫椂闂村拰缁撴潫鏃堕棿锛堜娇鐢ㄦ枃浠朵慨鏀规椂闂达級
+ // 寮�濮嬫椂闂达細浠庢枃浠跺悕涓殑鏃堕棿鎴�
SimpleDateFormat bcdFormat = new SimpleDateFormat("yyMMddHHmmss", Locale.CHINA);
- resourceInfo.setStartTime(bcdFormat.format(fileDate));
- // 缁撴潫鏃堕棿鍙互浣跨敤鏂囦欢淇敼鏃堕棿鍔犱笂涓�涓粯璁ゆ椂闀匡紙渚嬪1鍒嗛挓锛�
- long fileDuration = 60000; // 榛樿1鍒嗛挓锛屽疄闄呭簲璇ユ牴鎹枃浠跺唴瀹硅绠�
- Date endTime = new Date(fileDate.getTime() + fileDuration);
- resourceInfo.setEndTime(bcdFormat.format(endTime));
+ resourceInfo.setStartTime(bcdFormat.format(startTimeFromFileName));
+
+ // 缁撴潫鏃堕棿锛氫娇鐢ㄦ枃浠朵慨鏀规椂闂�
+ resourceInfo.setEndTime(bcdFormat.format(endTimeFromFile));
// 鎶ヨ鏍囧織锛堥粯璁ゅ�硷紝瀹為檯搴斾粠鏂囦欢鍏冩暟鎹幏鍙栵級
resourceInfo.setAlarmFlag(0L);
diff --git a/app/src/main/java/com/anyun/h264/H264Encoder.java b/app/src/main/java/com/anyun/h264/H264Encoder.java
index b65ac15..80a992a 100644
--- a/app/src/main/java/com/anyun/h264/H264Encoder.java
+++ b/app/src/main/java/com/anyun/h264/H264Encoder.java
@@ -3,7 +3,6 @@
import android.media.MediaCodec;
import android.media.MediaCodecInfo;
import android.media.MediaFormat;
-import android.util.Log;
import com.anyun.libusbcamera.UsbCamera;
import java.io.File;
@@ -12,6 +11,8 @@
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.concurrent.atomic.AtomicBoolean;
+
+import timber.log.Timber;
/**
* H264瑙嗛缂栫爜鍣�
@@ -143,7 +144,7 @@
*/
public void setEnableNetworkTransmission(boolean enable) {
this.enableNetworkTransmission = enable;
- Log.d(TAG, "Network transmission " + (enable ? "enabled" : "disabled"));
+ Timber.d("Network transmission " + (enable ? "enabled" : "disabled"));
}
/**
@@ -167,27 +168,27 @@
if (result == 0) {
// 鎴愬姛锛岃烦鍑哄惊鐜�
if (attempt > 0) {
- Log.d(TAG, "prepareCamera succeeded on attempt " + (attempt + 1));
+ Timber.d("prepareCamera succeeded on attempt " + (attempt + 1));
}
break;
} else {
// 澶辫触锛岃褰曟棩蹇�
- Log.w(TAG, "prepareCamera failed on attempt " + (attempt + 1) + ": " + result);
+ Timber.w( "prepareCamera failed on attempt " + (attempt + 1) + ": " + result);
if (attempt < maxRetries - 1) {
- Log.d(TAG, "Retrying prepareCamera...");
+ Timber.d( "Retrying prepareCamera...");
}
}
}
if (result != 0) {
- Log.e(TAG, "prepareCamera failed after " + maxRetries + " attempts: " + result);
+ Timber.e("prepareCamera failed after " + maxRetries + " attempts: " + result);
return false;
}
// 鏇存柊瀹為檯鍒嗚鲸鐜�
width = actualResolution[0];
height = actualResolution[1];
- Log.d(TAG, "Camera initialized with resolution: " + width + "x" + height);
+ Timber.d("Camera initialized with resolution: " + width + "x" + height);
// 3. 鍒濆鍖朒264缂栫爜鍣�
initEncoder();
@@ -199,19 +200,19 @@
return false;
}
} else {
- Log.d(TAG, "Network transmission disabled, skipping socket initialization");
+ Timber.d("Network transmission disabled, skipping socket initialization");
}
// 5. 鍒濆鍖栨枃浠惰緭鍑猴紙浠呭垱寤烘枃浠讹紝SPS/PPS鍦ㄧ涓�娆¤緭鍑烘椂鍐欏叆锛�
if (enableFileOutput && outputFilePath != null && !outputFilePath.isEmpty()) {
if (!initFileOutput()) {
- Log.w(TAG, "File output initialization failed, continuing without file output");
+ Timber.w("File output initialization failed, continuing without file output");
}
}
return true;
} catch (Exception e) {
- Log.e(TAG, "Initialize failed", e);
+ Timber.e(e,"Initialize failed");
return false;
}
}
@@ -230,7 +231,7 @@
encoder.configure(format, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
encoder.start();
- Log.d(TAG, "H264 encoder initialized");
+ Timber.d( "H264 encoder initialized");
}
/**
@@ -244,7 +245,7 @@
if (parentDir != null && !parentDir.exists()) {
boolean created = parentDir.mkdirs();
if (!created && !parentDir.exists()) {
- Log.e(TAG, "Failed to create parent directory: " + parentDir.getAbsolutePath());
+ Timber.e("Failed to create parent directory: " + parentDir.getAbsolutePath());
return false;
}
}
@@ -252,15 +253,15 @@
fileOutputStream = new FileOutputStream(file);
spsPpsWritten = false;
- Log.d(TAG, "File output initialized: " + outputFilePath);
+ Timber.d("File output initialized: " + outputFilePath);
return true;
} catch (Exception e) {
- Log.e(TAG, "Initialize file output failed", e);
+ Timber.e(e,"Initialize file output failed");
if (fileOutputStream != null) {
try {
fileOutputStream.close();
} catch (IOException ie) {
- Log.e(TAG, "Close file output stream failed", ie);
+ Timber.e(ie, "Close file output stream failed");
}
fileOutputStream = null;
}
@@ -321,12 +322,12 @@
fileOutputStream.flush();
spsPpsWritten = true;
- Log.d(TAG, "SPS/PPS written to file, SPS size: " + spsLength + ", PPS size: " + ppsLength);
+ Timber.d("SPS/PPS written to file, SPS size: " + spsLength + ", PPS size: " + ppsLength);
} else {
- Log.w(TAG, "SPS/PPS not found in CSD, will extract from first key frame");
+ Timber.w("SPS/PPS not found in CSD, will extract from first key frame");
}
} catch (Exception e) {
- Log.e(TAG, "Write SPS/PPS to file error", e);
+ Timber.e(e,"Write SPS/PPS to file error");
}
}
@@ -335,7 +336,7 @@
*/
public void start() {
if (isRunning.get()) {
- Log.w(TAG, "Encoder is already running");
+ Timber.w("Encoder is already running");
return;
}
@@ -350,7 +351,7 @@
});
encodeThread.start();
- Log.d(TAG, "H264 encoder started");
+ Timber.d("H264 encoder started");
}
/**
@@ -371,7 +372,7 @@
// processCamera - 璇诲彇涓�甯�
int processResult = usbCamera.processCamera();
if (processResult != 0) {
- Log.w(TAG, "processCamera returned: " + processResult);
+ Timber.w("processCamera returned: " + processResult);
Thread.sleep(10);
continue;
}
@@ -384,7 +385,7 @@
encodeFrame(nv12ToNV21(yuvBuffer,width,height), timestamp, bufferInfo);
} catch (Exception e) {
- Log.e(TAG, "Encode loop error", e);
+ Timber.e(e, "Encode loop error");
try {
Thread.sleep(100);
} catch (InterruptedException ie) {
@@ -393,7 +394,7 @@
}
}
- Log.d(TAG, "Encode loop exited");
+ Timber.d( "Encode loop exited");
}
/**
@@ -441,7 +442,7 @@
}
} catch (Exception e) {
- Log.e(TAG, "Encode frame error", e);
+ Timber.e(e,"Encode frame error");
}
}
@@ -462,7 +463,7 @@
// MediaCodec杈撳嚭鐨勫叧閿抚閫氬父宸茬粡鍖呭惈SPS/PPS锛屼絾涓轰簡纭繚鏂囦欢瀹屾暣鎬э紝
// 鎴戜滑宸茬粡浠嶤SD鍐欏叆锛岃繖閲岀洿鎺ュ啓鍏ュ叧閿抚鏁版嵁鍗冲彲
if (!spsPpsWritten) {
- Log.d(TAG, "SPS/PPS will be included in key frame data");
+ Timber.d("SPS/PPS will be included in key frame data");
}
}
@@ -471,7 +472,7 @@
fileOutputStream.write(data);
fileOutputStream.flush();
} catch (IOException e) {
- Log.e(TAG, "Write to file error", e);
+ Timber.e(e, "Write to file error");
}
}
@@ -531,7 +532,7 @@
}
} catch (Exception e) {
- Log.e(TAG, "Send encoded data error", e);
+ Timber.e(e,"Send encoded data error");
}
}
@@ -550,7 +551,7 @@
try {
encodeThread.join(2000);
} catch (InterruptedException e) {
- Log.e(TAG, "Wait encode thread error", e);
+ Timber.e(e, "Wait encode thread error");
}
}
@@ -566,7 +567,7 @@
encoder.release();
encoder = null;
} catch (Exception e) {
- Log.e(TAG, "Release encoder error", e);
+ Timber.e(e, "Release encoder error");
}
}
@@ -579,7 +580,7 @@
// 鍏抽棴鏂囦欢杈撳嚭
closeFileOutput();
- Log.d(TAG, "H264 encoder stopped");
+ Timber.d("H264 encoder stopped");
}
/**
@@ -590,9 +591,9 @@
try {
fileOutputStream.flush();
fileOutputStream.close();
- Log.d(TAG, "File output closed: " + outputFilePath);
+ Timber.d("File output closed: " + outputFilePath);
} catch (IOException e) {
- Log.e(TAG, "Close file output error", e);
+ Timber.e(e, "Close file output error");
} finally {
fileOutputStream = null;
spsPpsWritten = false;
--
Gitblit v1.8.0