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