From faad6b941d840167c30fd28efa019d8d81843386 Mon Sep 17 00:00:00 2001
From: Dana <Dana_Lee1016@126.com>
Date: 星期三, 24 十二月 2025 14:42:21 +0800
Subject: [PATCH] 1.日志最多打印5次(即使后续继续失败也不再打印)   2.连续5次 processCamera 返回 -1 时,自动终止编码推流和视频文件写入   3.成功获取帧数据后,计数器会重置,允许后续重新计数   4.终止编码线程  // 停止编码                                    isRunning.set(false);

---
 app/src/main/java/com/anyun/h264/H264Encoder.java |   38 +++++++++++++++++++++++++++++++++++++-
 1 files changed, 37 insertions(+), 1 deletions(-)

diff --git a/app/src/main/java/com/anyun/h264/H264Encoder.java b/app/src/main/java/com/anyun/h264/H264Encoder.java
index 02f5bfe..c5b9bae 100644
--- a/app/src/main/java/com/anyun/h264/H264Encoder.java
+++ b/app/src/main/java/com/anyun/h264/H264Encoder.java
@@ -96,6 +96,11 @@
     private byte[] spsBuffer = null; // SPS 缂撳瓨
     private byte[] ppsBuffer = null; // PPS 缂撳瓨
 
+    // processCamera 澶辫触璁℃暟
+    private int consecutiveFailureCount = 0; // 杩炵画澶辫触娆℃暟
+    private int logPrintCount = 0; // 鏃ュ織鎵撳嵃娆℃暟锛堟渶澶�5娆★級
+    private static final int MAX_CONSECUTIVE_FAILURES = 5; // 鏈�澶ц繛缁け璐ユ鏁�
+
     // 缂栫爜鍥炶皟
     public interface OnFrameEncodedCallback {
         void onFrameEncoded(byte[] data, boolean isKeyFrame);
@@ -623,16 +628,47 @@
 
         MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
 
+        // 閲嶇疆澶辫触璁℃暟鍣�
+        consecutiveFailureCount = 0;
+        logPrintCount = 0;
+
         while (isRunning.get()) {
             try {
                 // processCamera - 璇诲彇涓�甯�
                 int processResult = usbCamera.processCamera();
                 if (processResult != 0) {
-                    Timber.w("processCamera returned: " + processResult);
+                    // 澧炲姞杩炵画澶辫触璁℃暟
+                    consecutiveFailureCount++;
+                    
+                    // 闄愬埗鏃ュ織鎵撳嵃娆℃暟锛堟渶澶�5娆★級
+                    if (logPrintCount < MAX_CONSECUTIVE_FAILURES) {
+                        Timber.w("processCamera returned: " + processResult);
+                        logPrintCount++;
+                    }
+                    
+                    // 濡傛灉杩炵画5娆″け璐ワ紝缁堟缂栫爜
+                    if (consecutiveFailureCount >= MAX_CONSECUTIVE_FAILURES) {
+                        Timber.e("processCamera failed %d times consecutively, stopping encoding", MAX_CONSECUTIVE_FAILURES);
+                        // 鍋滄缂栫爜
+                        isRunning.set(false);
+                        // 鍏抽棴鏂囦欢杈撳嚭
+                        closeFileOutput();
+                        // 绂佺敤鏂囦欢杈撳嚭鍜岀綉缁滀紶杈�
+                        enableFileOutput = false;
+                        if (enableNetworkTransmission && protocolHelper != null) {
+                            protocolHelper.closeSocket();
+                        }
+                        break;
+                    }
+                    
                     Thread.sleep(10);
                     continue;
                 }
 
+                // 鎴愬姛鑾峰彇甯ф暟鎹紝閲嶇疆澶辫触璁℃暟鍣�
+                consecutiveFailureCount = 0;
+                logPrintCount = 0; // 閲嶇疆鏃ュ織璁℃暟锛屽厑璁镐笅娆″け璐ユ椂閲嶆柊鎵撳嵃
+
                 // 鑾峰彇RGBA鏁版嵁 (type=1 琛ㄧず鎺ㄦ祦锛岃緭鍑篩UV420P鏍煎紡)
                 usbCamera.rgba(0, yuvBuffer);
 

--
Gitblit v1.8.0