1.日志最多打印5次(即使后续继续失败也不再打印)
2.连续5次 processCamera 返回 -1 时,自动终止编码推流和视频文件写入
3.成功获取帧数据后,计数器会重置,允许后续重新计数
4.终止编码线程 // 停止编码
isRunning.set(false);
8个文件已修改
43 ■■■■■ 已修改文件
README_H264_CHECK.md 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/aidl/com/anyun/h264/model/ResourceInfo.aidl 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/anyun/h264/H264Encoder.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/anyun/h264/model/ResourceInfo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
app/src/main/java/com/anyun/h264/model/WatermarkInfo.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
check_h264.py 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
多进程方案使用说明.md 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
如何检查test.h264文件.md 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
README_H264_CHECK.md
@@ -120,3 +120,4 @@
app/src/main/aidl/com/anyun/h264/model/ResourceInfo.aidl
@@ -7,3 +7,4 @@
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) {
                    // å¢žåŠ è¿žç»­å¤±è´¥è®¡æ•°
                    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 è¡¨ç¤ºæŽ¨æµï¼Œè¾“出YUV420P格式)
                usbCamera.rgba(0, yuvBuffer);
app/src/main/java/com/anyun/h264/model/ResourceInfo.java
@@ -158,3 +158,4 @@
app/src/main/java/com/anyun/h264/model/WatermarkInfo.java
@@ -140,3 +140,4 @@
check_h264.py
@@ -210,3 +210,4 @@
¶à½ø³Ì·½°¸Ê¹ÓÃ˵Ã÷.md
@@ -118,3 +118,4 @@
ÈçºÎ¼ì²étest.h264Îļþ.md
@@ -184,3 +184,4 @@