From 537f4895dc9b428e13c550be7f41275a6a4882b8 Mon Sep 17 00:00:00 2001
From: Dana <Dana_Lee1016@126.com>
Date: 星期四, 29 一月 2026 14:08:14 +0800
Subject: [PATCH] 1.P2录像 无音频 只有P1有

---
 app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraRecordManager.java |  149 ++++++++++++++++++++++++++++++++-----------------
 1 files changed, 98 insertions(+), 51 deletions(-)

diff --git a/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraRecordManager.java b/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraRecordManager.java
index a99dfa2..0daac9e 100644
--- a/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraRecordManager.java
+++ b/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraRecordManager.java
@@ -344,32 +344,44 @@
             videoEncoder.configure(videoFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
             videoEncoder.start();
             
-            // 鍒涘缓闊抽缂栫爜鍣�
-            MediaFormat audioFormat = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, SAMPLE_RATE, CHANNEL_COUNT);
-            audioFormat.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectLC);
-            audioFormat.setInteger(MediaFormat.KEY_BIT_RATE, AUDIO_BIT_RATE);
+            // P2 鎽勫儚澶达紙usbCameraId == 2锛変笉褰曞埗闊抽锛屽洜涓洪害鍏嬮鍙湁涓�涓紝鍙湪 P1 鏃朵娇鐢�
+            boolean enableAudio = (mediaArgu == null || mediaArgu.getUsbCameraId() != 2);
             
-            audioEncoder = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_AUDIO_AAC);
-            audioEncoder.configure(audioFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
-            audioEncoder.start();
-            
-            // 鍒濆鍖朅udioRecord
-            audioBufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT);
-            if (audioBufferSize <= 0) {
-                audioBufferSize = SAMPLE_RATE * 2; // 榛樿缂撳啿鍖哄ぇ灏�
-            }
-            
-            audioRecord = new AudioRecord(
-                    MediaRecorder.AudioSource.MIC,
-                    SAMPLE_RATE,
-                    CHANNEL_CONFIG,
-                    AUDIO_FORMAT,
-                    audioBufferSize * 2
-            );
-            
-            if (audioRecord.getState() != AudioRecord.STATE_INITIALIZED) {
-                Timber.e("AudioRecord鍒濆鍖栧け璐�");
-                return false;
+            if (enableAudio) {
+                // 鍒涘缓闊抽缂栫爜鍣�
+                MediaFormat audioFormat = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AAC, SAMPLE_RATE, CHANNEL_COUNT);
+                audioFormat.setInteger(MediaFormat.KEY_AAC_PROFILE, MediaCodecInfo.CodecProfileLevel.AACObjectLC);
+                audioFormat.setInteger(MediaFormat.KEY_BIT_RATE, AUDIO_BIT_RATE);
+                
+                audioEncoder = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_AUDIO_AAC);
+                audioEncoder.configure(audioFormat, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
+                audioEncoder.start();
+                
+                // 鍒濆鍖朅udioRecord
+                audioBufferSize = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT);
+                if (audioBufferSize <= 0) {
+                    audioBufferSize = SAMPLE_RATE * 2; // 榛樿缂撳啿鍖哄ぇ灏�
+                }
+                
+                audioRecord = new AudioRecord(
+                        MediaRecorder.AudioSource.MIC,
+                        SAMPLE_RATE,
+                        CHANNEL_CONFIG,
+                        AUDIO_FORMAT,
+                        audioBufferSize * 2
+                );
+                
+                if (audioRecord.getState() != AudioRecord.STATE_INITIALIZED) {
+                    Timber.e("AudioRecord鍒濆鍖栧け璐�");
+                    return false;
+                }
+                Timber.d("闊抽缂栫爜鍣ㄥ拰AudioRecord鍒濆鍖栨垚鍔燂紙P1妯″紡锛�");
+            } else {
+                // P2 妯″紡锛氫笉鍒濆鍖栭煶棰戠浉鍏宠祫婧�
+                audioEncoder = null;
+                audioRecord = null;
+                audioTrackIndex = -1;
+                Timber.d("P2妯″紡锛氳烦杩囬煶棰戝垵濮嬪寲锛屼粎褰曞埗瑙嗛");
             }
             
             // 鍒涘缓鏂扮殑瑙嗛鏂囦欢
@@ -381,11 +393,14 @@
             
             mediaMuxer = new MediaMuxer(currentVideoFile.getAbsolutePath(), MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4);
             videoTrackIndex = -1;
-            audioTrackIndex = -1;
+            if (enableAudio) {
+                audioTrackIndex = -1; // 鍙湁鍦ㄥ惎鐢ㄩ煶棰戞椂鎵嶅垵濮嬪寲涓�-1锛屽惁鍒欎繚鎸�-1锛堣〃绀烘棤闊抽杞ㄩ亾锛�
+            }
             muxerStarted = false;
             currentFileStartTime = System.currentTimeMillis();
             
-            Timber.d("缂栫爜鍣ㄥ拰Muxer鍒濆鍖栨垚鍔燂紝鏂囦欢: %s", currentVideoFile.getAbsolutePath());
+            Timber.d("缂栫爜鍣ㄥ拰Muxer鍒濆鍖栨垚鍔燂紝鏂囦欢: %s, 闊抽: %s", 
+                    currentVideoFile.getAbsolutePath(), enableAudio ? "鍚敤" : "绂佺敤");
             return true;
         } catch (Exception e) {
             Timber.e(e, "鍒濆鍖栫紪鐮佸櫒鍜孧uxer澶辫触");
@@ -498,19 +513,23 @@
                     return;
                 }
                 
-                // 鍚姩闊抽褰曞埗
-                if (audioRecord != null) {
+                // P2妯″紡锛坲sbCameraId == 2锛変笉鍚姩闊抽褰曞埗
+                boolean isP2Mode = (mediaArgu != null && mediaArgu.getUsbCameraId() == 2);
+                if (!isP2Mode && audioRecord != null) {
+                    // 鍚姩闊抽褰曞埗
                     audioRecord.startRecording();
-                    Timber.d("闊抽褰曞埗宸插惎鍔�");
+                    Timber.d("闊抽褰曞埗宸插惎鍔紙P1妯″紡锛�");
+                    
+                    // 娉ㄦ剰锛氫笉瑕佸湪杩欓噷涓诲姩妫�鏌ラ煶棰戠紪鐮佸櫒杈撳嚭鏍煎紡
+                    // 鍥犱负 MediaCodec 鐨� getOutputFormat() 鍦ㄧ紪鐮佸櫒鍚姩鍚庡彲鑳借繑鍥� null
+                    // 搴旇绛夊緟 INFO_OUTPUT_FORMAT_CHANGED 浜嬩欢
+                    
+                    // 鍚姩闊抽缂栫爜绾跨▼
+                    audioThread = new AudioThread();
+                    audioThread.start();
+                } else {
+                    Timber.d("P2妯″紡锛氳烦杩囬煶棰戝綍鍒跺拰缂栫爜绾跨▼");
                 }
-                
-                // 娉ㄦ剰锛氫笉瑕佸湪杩欓噷涓诲姩妫�鏌ラ煶棰戠紪鐮佸櫒杈撳嚭鏍煎紡
-                // 鍥犱负 MediaCodec 鐨� getOutputFormat() 鍦ㄧ紪鐮佸櫒鍚姩鍚庡彲鑳借繑鍥� null
-                // 搴旇绛夊緟 INFO_OUTPUT_FORMAT_CHANGED 浜嬩欢
-                
-                // 鍚姩闊抽缂栫爜绾跨▼
-                audioThread = new AudioThread();
-                audioThread.start();
                 
                 Timber.d("寮�濮嬪綍鍍忥紝鍒嗚鲸鐜�: %dx%d", width, height);
                 
@@ -547,12 +566,14 @@
                         // 閲嶇疆寮�濮嬫椂闂�
                         recordingStartTimeNs = System.nanoTime();
                         
-                        // 閲嶆柊鍚姩闊抽褰曞埗
-                        if (audioRecord != null) {
+                        // P2妯″紡涓嶅惎鍔ㄩ煶棰戝綍鍒�
+                        isP2Mode = (mediaArgu != null && mediaArgu.getUsbCameraId() == 2);
+                        if (!isP2Mode && audioRecord != null) {
+                            // 閲嶆柊鍚姩闊抽褰曞埗
                             audioRecord.startRecording();
+                            audioThread = new AudioThread();
+                            audioThread.start();
                         }
-                        audioThread = new AudioThread();
-                        audioThread.start();
                         
                         lastFileChangeTime = currentTime;
                         frameCount = 0;
@@ -678,19 +699,39 @@
     }
     
     /**
-     * 妫�鏌ュ苟鍚姩Muxer锛堝綋瑙嗛鍜岄煶棰戣建閬撻兘鍑嗗濂芥椂锛�
+     * 妫�鏌ュ苟鍚姩Muxer
+     * P1妯″紡锛氬綋瑙嗛鍜岄煶棰戣建閬撻兘鍑嗗濂芥椂鍚姩
+     * P2妯″紡锛氬綋瑙嗛杞ㄩ亾鍑嗗濂芥椂鍗冲彲鍚姩锛堟棤闊抽杞ㄩ亾锛�
      */
     private synchronized void checkAndStartMuxer() {
-        if (!muxerStarted && videoTrackIndex >= 0 && audioTrackIndex >= 0) {
-            try {
-                mediaMuxer.start();
-                muxerStarted = true;
-                Timber.d("Muxer started, video track: %d, audio track: %d", videoTrackIndex, audioTrackIndex);
-            } catch (Exception e) {
-                Timber.e(e, "Failed to start muxer");
+        boolean isP2Mode = (mediaArgu != null && mediaArgu.getUsbCameraId() == 2);
+        
+        if (isP2Mode) {
+            // P2妯″紡锛氬彧瑕佹湁瑙嗛杞ㄩ亾灏卞惎鍔�
+            if (!muxerStarted && videoTrackIndex >= 0) {
+                try {
+                    mediaMuxer.start();
+                    muxerStarted = true;
+                    Timber.d("Muxer started (P2妯″紡锛屼粎瑙嗛), video track: %d", videoTrackIndex);
+                } catch (Exception e) {
+                    Timber.e(e, "Failed to start muxer");
+                }
+            } else {
+                Timber.d("Muxer not started yet (P2妯″紡), video track: %d", videoTrackIndex);
             }
         } else {
-            Timber.d("Muxer not started yet, video track: %d, audio track: %d", videoTrackIndex, audioTrackIndex);
+            // P1妯″紡锛氶渶瑕佽棰戝拰闊抽杞ㄩ亾閮藉噯澶囧ソ
+            if (!muxerStarted && videoTrackIndex >= 0 && audioTrackIndex >= 0) {
+                try {
+                    mediaMuxer.start();
+                    muxerStarted = true;
+                    Timber.d("Muxer started (P1妯″紡锛岃棰�+闊抽), video track: %d, audio track: %d", videoTrackIndex, audioTrackIndex);
+                } catch (Exception e) {
+                    Timber.e(e, "Failed to start muxer");
+                }
+            } else {
+                Timber.d("Muxer not started yet (P1妯″紡), video track: %d, audio track: %d", videoTrackIndex, audioTrackIndex);
+            }
         }
     }
     
@@ -709,6 +750,12 @@
             super.run();
             Timber.d("AudioThread started");
             
+            // 濡傛灉闊抽璧勬簮鏈垵濮嬪寲锛圥2妯″紡锛夛紝鐩存帴閫�鍑�
+            if (audioRecord == null || audioEncoder == null) {
+                Timber.d("AudioThread: 闊抽璧勬簮鏈垵濮嬪寲锛岄��鍑猴紙鍙兘鏄疨2妯″紡锛�");
+                return;
+            }
+            
             try {
                 byte[] audioBuffer = new byte[audioBufferSize];
                 long totalSamplesRead = 0; // 鎬婚噰鏍锋暟

--
Gitblit v1.8.0