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/util/VideoFileUtils.java | 5 +
app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraRecordManager.java | 149 ++++++++++++++++++++++++++++++++-----------------
2 files changed, 101 insertions(+), 53 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; // 鎬婚噰鏍锋暟
diff --git a/app/src/main/java/com/safeluck/floatwindow/util/VideoFileUtils.java b/app/src/main/java/com/safeluck/floatwindow/util/VideoFileUtils.java
index 9738b2e..c0c6e91 100644
--- a/app/src/main/java/com/safeluck/floatwindow/util/VideoFileUtils.java
+++ b/app/src/main/java/com/safeluck/floatwindow/util/VideoFileUtils.java
@@ -99,10 +99,11 @@
* 鑾峰彇瑙嗛鏂囦欢璺緞瀛楃涓� 鍙兘鑾峰彇鍒板唴閮ㄧ浉鏈烘枃浠剁殑璺緞
* @param context 涓婁笅鏂�
* @param tfCardFlag 0-鍐呴儴瀛樺偍锛�1-澶栭儴瀛樺偍
+ * @param cameraid 0-android绯荤粺鐩告満 1-P1 2-P2
* @return 鏂囦欢璺緞瀛楃涓�
*/
- public static String getVideoFilePath(Context context, int tfCardFlag) {
- File file = getVideoFile(context, tfCardFlag,0);
+ public static String getVideoFilePath(Context context, int tfCardFlag,int cameraid) {
+ File file = getVideoFile(context, tfCardFlag,cameraid);
return file != null ? file.getAbsolutePath() : null;
}
}
--
Gitblit v1.8.0