From 430512c7927776edcee161ee600f1ee5bf34e566 Mon Sep 17 00:00:00 2001
From: Dana <Dana_Lee1016@126.com>
Date: 星期五, 06 二月 2026 14:43:54 +0800
Subject: [PATCH] 1.notifyCallback synchronized
---
app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraPushManager.java | 56 +++++++++++-------
app/src/main/java/com/safeluck/floatwindow/P2UsbCameraVideoService.java | 6 +
app/src/main/java/com/safeluck/floatwindow/FloatingService.java | 3
app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraRecordManager.java | 62 ++++++++++++--------
4 files changed, 78 insertions(+), 49 deletions(-)
diff --git a/app/src/main/java/com/safeluck/floatwindow/FloatingService.java b/app/src/main/java/com/safeluck/floatwindow/FloatingService.java
index 106ec32..4be5267 100644
--- a/app/src/main/java/com/safeluck/floatwindow/FloatingService.java
+++ b/app/src/main/java/com/safeluck/floatwindow/FloatingService.java
@@ -331,9 +331,10 @@
/**
* 閫氱煡鍥炶皟锛氱粺涓�浣跨敤 ResponseVO
+ * 浣跨敤 synchronized 纭繚 RemoteCallbackList 鎿嶄綔鐨勭嚎绋嬪畨鍏�
* @param response ResponseVO 瀵硅薄锛屽寘鍚� type銆乪rrCode銆乵essage
*/
- private void notifyCallback(ResponseVO response) {
+ private synchronized void notifyCallback(ResponseVO response) {
if (response == null) {
return;
}
diff --git a/app/src/main/java/com/safeluck/floatwindow/P2UsbCameraVideoService.java b/app/src/main/java/com/safeluck/floatwindow/P2UsbCameraVideoService.java
index a6c1b10..842596c 100644
--- a/app/src/main/java/com/safeluck/floatwindow/P2UsbCameraVideoService.java
+++ b/app/src/main/java/com/safeluck/floatwindow/P2UsbCameraVideoService.java
@@ -173,7 +173,11 @@
currentManagerType = ManagerType.NONE;
}
- private void notifyCallback(ResponseVO response) {
+ /**
+ * 閫氱煡鍥炶皟锛氱粺涓�浣跨敤 ResponseVO
+ * 浣跨敤 synchronized 纭繚 RemoteCallbackList 鎿嶄綔鐨勭嚎绋嬪畨鍏�
+ */
+ private synchronized void notifyCallback(ResponseVO response) {
if (response == null) return;
int count = mCallbacks.beginBroadcast();
for (int i = 0; i < count; i++) {
diff --git a/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraPushManager.java b/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraPushManager.java
index b78ab51..8b44b11 100644
--- a/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraPushManager.java
+++ b/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraPushManager.java
@@ -132,7 +132,7 @@
if (media.getM_screen() != null) {
resolutionArr[0] = media.getM_screen().getWidth();
resolutionArr[1] = media.getM_screen().getHeight();
- Timber.d("璁剧疆鍒嗚鲸鐜�: %dx%d", resolutionArr[0], resolutionArr[1]);
+ Timber.d("%s 璁剧疆鍒嗚鲸鐜�: %dx%d", getCameraTag(), resolutionArr[0], resolutionArr[1]);
}
try {
@@ -149,11 +149,11 @@
}
cameraExists = true;
- Timber.d("USB鎽勫儚澶存墦寮�鎴愬姛");
+ Timber.d("%s USB鎽勫儚澶存墦寮�鎴愬姛", getCameraTag());
notifyCallback(1, 0, "鎺ㄦ祦绾跨▼宸插惎鍔紝绛夊緟鎺ㄦ祦鐘舵�佸氨缁�");
} catch (Exception e) {
- Timber.e(e, "Failed to start push");
+ Timber.e(e, "%s Failed to start push", getCameraTag());
notifyCallback(1, -3, "鍚姩鎺ㄦ祦澶辫触: " + e.getMessage());
}
}
@@ -162,7 +162,7 @@
* 鍋滄鎺ㄦ祦
*/
public void stopPush() {
- Timber.d("stopPush called");
+ Timber.d("%s stopPush called", getCameraTag());
stopPushThread();
// stopAudioTransfer();
stopWaterMaskSchedule();
@@ -225,7 +225,7 @@
@Override
public void surfaceCreated(SurfaceHolder holder) {
try {
- Timber.d("previewSurfaceView surfaceCreated, startPreviewAysnc");
+ Timber.d("%s previewSurfaceView surfaceCreated, startPreviewAysnc", getCameraTag());
if (alivcPusher != null) {
alivcPusher.startPreviewAysnc(previewSurfaceView);
@@ -235,7 +235,7 @@
startPushThread();
}
} catch (Exception e) {
- Timber.e(e, "startPreviewAysnc in surfaceCreated failed");
+ Timber.e(e, "%s startPreviewAysnc in surfaceCreated failed", getCameraTag());
notifyCallback(1, -3, "棰勮鍚姩澶辫触: " + e.getMessage());
}
}
@@ -283,9 +283,9 @@
// 璁剧疆鐩戝惉鍣�
setupListeners();
- Timber.d("AlivcPusher initialized successfully");
+ Timber.d("%s AlivcPusher initialized successfully", getCameraTag());
} catch (Exception e) {
- Timber.e(e, "Failed to initialize AlivcPusher");
+ Timber.e(e, "%s Failed to initialize AlivcPusher", getCameraTag());
notifyCallback(1, -3, "鍒濆鍖栨帹娴丼DK澶辫触: " + e.getMessage());
}
}
@@ -414,17 +414,17 @@
alivcPusher.setLivePushInfoListener(new AlivcLivePushInfoListener() {
@Override
public void onPreviewStarted(AlivcLivePusher alivcLivePusher) {
- Timber.d("onPreviewStarted");
+ Timber.d("%s onPreviewStarted", getCameraTag());
mainHandler.postDelayed(()->{
// 棰勮灏辩华鍚庡啀鍚姩鎺ㄦ祦锛岄伩鍏� INIT 鐘舵�佺洿鎺� startPush 鎶ラ敊
if (alivcPusher != null && pushUrl != null && !pushUrl.isEmpty()) {
try {
AlivcLivePushStats s = alivcPusher.getCurrentStatus();
- Timber.i("onPreviewStarted, current status=%s", s != null ? s.name() : "null");
- Timber.d("寮�濮嬫帹娴�: %s", pushUrl);
+ Timber.i("%s onPreviewStarted, current status=%s", getCameraTag(), s != null ? s.name() : "null");
+ Timber.d("%s 寮�濮嬫帹娴�: %s", getCameraTag(), pushUrl);
alivcPusher.startPushAysnc(pushUrl);
} catch (Exception e) {
- Timber.e(e, "startPushAysnc failed");
+ Timber.e(e, "%s startPushAysnc failed", getCameraTag());
notifyCallback(1, -3, "鍚姩鎺ㄦ祦澶辫触: " + e.getMessage());
}
}
@@ -439,7 +439,7 @@
@Override
public void onPushStarted(AlivcLivePusher alivcLivePusher) {
- Timber.d("onPushStarted");
+ Timber.d("%s onPushStarted", getCameraTag());
pushStarted = true;
// startAudioTransfer();
notifyCallback(1, 0, "鎺ㄦ祦宸插紑濮嬶紝鍒嗚鲸鐜�: " + resolutionArr[0] + "x" + resolutionArr[1]);
@@ -624,7 +624,7 @@
int ret = -1;
for (int i = 0; i < 3; i++) {
ret = usbCamera.prepareCamera(cameraIds, cameraName, resolutionArr, ay_encrypt);
- Timber.d("USB鎽勫儚澶寸%d娆℃墦寮�缁撴灉: %d, 鍒嗚鲸鐜�: %dx%d", i + 1, ret, resolutionArr[0], resolutionArr[1]);
+ Timber.d("%s USB鎽勫儚澶寸%d娆℃墦寮�缁撴灉: %d, 鍒嗚鲸鐜�: %dx%d", getCameraTag(), i + 1, ret, resolutionArr[0], resolutionArr[1]);
if (ret == 0) {
break;
}
@@ -635,7 +635,7 @@
// 鎴愬姛鏍囧噯锛歱repareCamera 杩斿洖 0
return ret == 0;
} catch (Exception e) {
- Timber.e(e, "鎵撳紑USB鎽勫儚澶村紓甯�");
+ Timber.e(e, "%s 鎵撳紑USB鎽勫儚澶村紓甯�", getCameraTag());
return false;
}
}
@@ -648,7 +648,7 @@
isRunning = true;
pushThread = new PushThread();
pushThread.start();
- Timber.d("Push thread started");
+ Timber.d("%s Push thread started", getCameraTag());
}
}
@@ -711,7 +711,7 @@
@Override
public void run() {
super.run();
- Timber.d("PushThread started");
+ Timber.d("%s PushThread started", getCameraTag());
try {
int width = resolutionArr[0];
@@ -722,14 +722,14 @@
int bufferSize = width * height * 3 / 2;
byte[] buffer = new byte[bufferSize];
- Timber.d("寮�濮嬫帹閫佽棰戞暟鎹紝鍒嗚鲸鐜�: %dx%d", width, height);
+ Timber.d("%s 寮�濮嬫帹閫佽棰戞暟鎹紝鍒嗚鲸鐜�: %dx%d", getCameraTag(), width, height);
// 寰幆澶勭悊鎽勫儚澶存暟鎹�
while (isRunning && cameraExists) {
// 澶勭悊鎽勫儚澶存暟鎹�
int processResult = usbCamera.processCamera();
if (processResult == -1) {
- Timber.w("processCamera杩斿洖-1锛屾憚鍍忓ご鍙兘鏂紑");
+ Timber.w("%s processCamera杩斿洖-1锛屾憚鍍忓ご鍙兘鏂紑", getCameraTag());
cameraExists = false;
notifyCallback(1, -1, "USB鎽勫儚澶存柇寮�");
break;
@@ -751,7 +751,7 @@
0 // rotation
);
} catch (Exception e) {
- Timber.e(e, "Error pushing frame");
+ Timber.e(e, "%s Error pushing frame", getCameraTag());
}
} else if (!pushStarted) {
// 绛夊緟 onPushStarted 鍚庡啀鍠傚抚锛岄伩鍏� SDK invalid state
@@ -763,16 +763,28 @@
}
} catch (Exception e) {
- Timber.e(e, "Error in push thread");
+ Timber.e(e, "%s Error in push thread", getCameraTag());
cameraExists = false;
notifyCallback(1, -1, "鎺ㄦ祦绾跨▼寮傚父: " + e.getMessage());
} finally {
- Timber.d("PushThread ended");
+ Timber.d("%s PushThread ended", getCameraTag());
}
}
}
/**
+ * 鑾峰彇鎽勫儚澶碔D鏍囩锛岀敤浜庢棩蹇�
+ * @return "[P1]" 鎴� "[P2]"
+ */
+ private String getCameraTag() {
+ if (mediaArgu != null) {
+ int usbCameraId = mediaArgu.getUsbCameraId();
+ return usbCameraId == 2 ? "[P2]" : "[P1]";
+ }
+ return "[P1]"; // 榛樿 P1
+ }
+
+ /**
* 閫氱煡鍥炶皟
*/
private void notifyCallback(int type, int errCode, String message) {
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 9d6bd0c..b64cfd1 100644
--- a/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraRecordManager.java
+++ b/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraRecordManager.java
@@ -122,7 +122,7 @@
if (media.getM_screen() != null) {
resolutionArr[0] = media.getM_screen().getWidth();
resolutionArr[1] = media.getM_screen().getHeight();
- Timber.d("璁剧疆鍒嗚鲸鐜�: %dx%d", resolutionArr[0], resolutionArr[1]);
+ Timber.d("%s 璁剧疆鍒嗚鲸鐜�: %dx%d", getCameraTag(), resolutionArr[0], resolutionArr[1]);
}
try {
@@ -134,14 +134,14 @@
}
setWaterMask();
cameraExists = true;
- Timber.d("USB鎽勫儚澶存墦寮�鎴愬姛");
+ Timber.d("%s USB鎽勫儚澶存墦寮�鎴愬姛", getCameraTag());
// 鍚姩褰曞儚绾跨▼
startRecordThread();
notifyCallback(0, 0, "褰曞儚宸插惎鍔�");
} catch (Exception e) {
- Timber.e(e, "Failed to start record");
+ Timber.e(e, "%s Failed to start record", getCameraTag());
notifyCallback(0, -3, "鍚姩褰曞儚澶辫触: " + e.getMessage());
}
}
@@ -262,7 +262,7 @@
* 鍋滄褰曞儚
*/
public void stopRecord() {
- Timber.d("stopRecord called");
+ Timber.d("%s stopRecord called", getCameraTag());
stopWaterMaskSchedule();
@@ -321,7 +321,7 @@
int ret = -1;
for (int i = 0; i < 3; i++) {
ret = usbCamera.prepareCamera(cameraIds, cameraName, resolutionArr, ay_encrypt);
- Timber.d("USB褰曞儚鎽勫儚澶寸%d娆℃墦寮�缁撴灉: %d, 鍒嗚鲸鐜�: %dx%d", i + 1, ret, resolutionArr[0], resolutionArr[1]);
+ Timber.d("%s USB褰曞儚鎽勫儚澶寸%d娆℃墦寮�缁撴灉: %d, 鍒嗚鲸鐜�: %dx%d", getCameraTag(), i + 1, ret, resolutionArr[0], resolutionArr[1]);
if (ret == 0) {
break;
}
@@ -332,7 +332,7 @@
// 鎴愬姛鏍囧噯锛歱repareCamera 杩斿洖 0
return ret == 0;
} catch (Exception e) {
- Timber.e(e, "鎵撳紑USB鎽勫儚澶村紓甯�");
+ Timber.e(e, "%s 鎵撳紑USB鎽勫儚澶村紓甯�", getCameraTag());
return false;
}
}
@@ -384,22 +384,22 @@
);
if (audioRecord.getState() != AudioRecord.STATE_INITIALIZED) {
- Timber.e("AudioRecord鍒濆鍖栧け璐�");
+ Timber.e("%s AudioRecord鍒濆鍖栧け璐�", getCameraTag());
return false;
}
- Timber.d("闊抽缂栫爜鍣ㄥ拰AudioRecord鍒濆鍖栨垚鍔燂紙P1妯″紡锛�");
+ Timber.d("%s 闊抽缂栫爜鍣ㄥ拰AudioRecord鍒濆鍖栨垚鍔燂紙P1妯″紡锛�", getCameraTag());
} else {
// P2 妯″紡锛氫笉鍒濆鍖栭煶棰戠浉鍏宠祫婧�
audioEncoder = null;
audioRecord = null;
audioTrackIndex = -1;
- Timber.d("P2妯″紡锛氳烦杩囬煶棰戝垵濮嬪寲锛屼粎褰曞埗瑙嗛");
+ Timber.d("%s P2妯″紡锛氳烦杩囬煶棰戝垵濮嬪寲锛屼粎褰曞埗瑙嗛", getCameraTag());
}
// 鍒涘缓鏂扮殑瑙嗛鏂囦欢
currentVideoFile = VideoFileUtils.getVideoFile(context, mediaArgu.getTfCardFlag(),mediaArgu.getUsbCameraId());
if (currentVideoFile == null) {
- Timber.e("Failed to create video file");
+ Timber.e("%s Failed to create video file", getCameraTag());
return false;
}
@@ -411,11 +411,11 @@
muxerStarted = false;
currentFileStartTime = System.currentTimeMillis();
- Timber.d("缂栫爜鍣ㄥ拰Muxer鍒濆鍖栨垚鍔燂紝鏂囦欢: %s, 闊抽: %s",
+ Timber.d("%s 缂栫爜鍣ㄥ拰Muxer鍒濆鍖栨垚鍔燂紝鏂囦欢: %s, 闊抽: %s", getCameraTag(),
currentVideoFile.getAbsolutePath(), enableAudio ? "鍚敤" : "绂佺敤");
return true;
} catch (Exception e) {
- Timber.e(e, "鍒濆鍖栫紪鐮佸櫒鍜孧uxer澶辫触");
+ Timber.e(e, "%s 鍒濆鍖栫紪鐮佸櫒鍜孧uxer澶辫触", getCameraTag());
return false;
}
}
@@ -487,7 +487,7 @@
isRunning = true;
recordThread = new RecordThread();
recordThread.start();
- Timber.d("Record thread started");
+ Timber.d("%s Record thread started", getCameraTag());
}
}
@@ -514,7 +514,7 @@
@Override
public void run() {
super.run();
- Timber.d("RecordThread started");
+ Timber.d("%s RecordThread started", getCameraTag());
try {
int width = resolutionArr[0];
@@ -535,7 +535,7 @@
if (!isP2Mode && audioRecord != null) {
// 鍚姩闊抽褰曞埗
audioRecord.startRecording();
- Timber.d("闊抽褰曞埗宸插惎鍔紙P1妯″紡锛�");
+ Timber.d("%s 闊抽褰曞埗宸插惎鍔紙P1妯″紡锛�", getCameraTag());
// 娉ㄦ剰锛氫笉瑕佸湪杩欓噷涓诲姩妫�鏌ラ煶棰戠紪鐮佸櫒杈撳嚭鏍煎紡
// 鍥犱负 MediaCodec 鐨� getOutputFormat() 鍦ㄧ紪鐮佸櫒鍚姩鍚庡彲鑳借繑鍥� null
@@ -545,10 +545,10 @@
audioThread = new AudioThread();
audioThread.start();
} else {
- Timber.d("P2妯″紡锛氳烦杩囬煶棰戝綍鍒跺拰缂栫爜绾跨▼");
+ Timber.d("%s P2妯″紡锛氳烦杩囬煶棰戝綍鍒跺拰缂栫爜绾跨▼", getCameraTag());
}
- Timber.d("寮�濮嬪綍鍍忥紝鍒嗚鲸鐜�: %dx%d", width, height);
+ Timber.d("%s 寮�濮嬪綍鍍忥紝鍒嗚鲸鐜�: %dx%d", getCameraTag(), width, height);
// 璁板綍寮�濮嬫椂闂达紙绾崇锛岀敤浜庣簿纭椂闂存埑锛�
recordingStartTimeNs = System.nanoTime();
@@ -613,7 +613,7 @@
// 澶勭悊鎽勫儚澶存暟鎹�
int processResult = usbCamera.processCamera();
if (processResult == -1) {
- Timber.w("processCamera杩斿洖-1锛屾憚鍍忓ご鍙兘鏂紑");
+ Timber.w("%s processCamera杩斿洖-1锛屾憚鍍忓ご鍙兘鏂紑", getCameraTag());
cameraExists = false;
notifyCallback(0, -1, "USB鎽勫儚澶存柇寮�");
break;
@@ -635,7 +635,7 @@
}
} catch (Exception e) {
- Timber.e(e, "Error in record thread");
+ Timber.e(e, "%s Error in record thread,%s", getCameraTag(),e.getMessage());
cameraExists = false;
notifyCallback(0, -1, "褰曞儚绾跨▼寮傚父: " + e.getMessage());
} finally {
@@ -645,7 +645,7 @@
try {
audioThread.join(1000);
} catch (InterruptedException e) {
- Timber.e(e, "Error stopping audio thread");
+ Timber.e(e, "%s Error stopping audio thread,%s", getCameraTag(),e.getMessage());
}
audioThread = null;
}
@@ -658,7 +658,7 @@
completedVideoFile = null;
}
- Timber.d("RecordThread ended");
+ Timber.d("%s RecordThread ended", getCameraTag());
}
}
@@ -901,11 +901,11 @@
@Override
public void run() {
super.run();
- Timber.d("AudioThread started");
+ Timber.d("%s AudioThread started", getCameraTag());
// 濡傛灉闊抽璧勬簮鏈垵濮嬪寲锛圥2妯″紡锛夛紝鐩存帴閫�鍑�
if (audioRecord == null || audioEncoder == null) {
- Timber.d("AudioThread: 闊抽璧勬簮鏈垵濮嬪寲锛岄��鍑猴紙鍙兘鏄疨2妯″紡锛�");
+ Timber.d("%s AudioThread: 闊抽璧勬簮鏈垵濮嬪寲锛岄��鍑猴紙鍙兘鏄疨2妯″紡锛�", getCameraTag());
return;
}
@@ -927,9 +927,9 @@
}
} catch (Exception e) {
- Timber.e(e, "Error in audio thread");
+ Timber.e(e, "%s Error in audio thread", getCameraTag());
} finally {
- Timber.d("AudioThread ended");
+ Timber.d("%s AudioThread ended", getCameraTag());
}
}
@@ -1003,6 +1003,18 @@
}
/**
+ * 鑾峰彇鎽勫儚澶碔D鏍囩锛岀敤浜庢棩蹇�
+ * @return "[P1]" 鎴� "[P2]"
+ */
+ private String getCameraTag() {
+ if (mediaArgu != null) {
+ int usbCameraId = mediaArgu.getUsbCameraId();
+ return usbCameraId == 2 ? "[P2]" : "[P1]";
+ }
+ return "[P1]"; // 榛樿 P1
+ }
+
+ /**
* 閫氱煡鍥炶皟
*/
private void notifyCallback(int type, int errCode, String message) {
--
Gitblit v1.8.0