From de7368d08258b80af017bc3a0ac891b314f01e36 Mon Sep 17 00:00:00 2001
From: Dana <Dana_Lee1016@126.com>
Date: 星期五, 06 二月 2026 13:31:59 +0800
Subject: [PATCH] 1.录像、推流 回调,关联摄像头 2.推流 startPush主线程(P2 3.

---
 app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraPushManager.java   |   27 ++++++++++++++++++++++++---
 app/src/main/java/com/safeluck/floatwindow/ResponseVO.java                     |   13 +++++++++++++
 app/src/main/java/com/safeluck/floatwindow/FloatingService.java                |   10 ++++++----
 app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraRecordManager.java |    7 +++++++
 4 files changed, 50 insertions(+), 7 deletions(-)

diff --git a/app/src/main/java/com/safeluck/floatwindow/FloatingService.java b/app/src/main/java/com/safeluck/floatwindow/FloatingService.java
index 184cc3b..106ec32 100644
--- a/app/src/main/java/com/safeluck/floatwindow/FloatingService.java
+++ b/app/src/main/java/com/safeluck/floatwindow/FloatingService.java
@@ -198,7 +198,7 @@
     private void startMedia(MediaArgu media) {
         if (media == null) {
             Timber.w("startMedia: media is null");
-            notifyCallback(1, -1, "MediaArgu is null");
+            notifyCallback(1, -1, "MediaArgu is null",1);
             return;
         }
 
@@ -210,7 +210,7 @@
                     p2Service.startMedia(media);
                 } catch (RemoteException e) {
                     Timber.e(e, "startMedia forward to P2 failed");
-                    notifyCallback(1, -3, "鍚姩P2鏈嶅姟澶辫触: " + e.getMessage());
+                    notifyCallback(1, -3, "鍚姩P2鏈嶅姟澶辫触: " + e.getMessage(),2);
                 }
             } else {
                 // 绛夊緟杩炴帴瀹屾垚鍚庢墽琛�
@@ -232,7 +232,7 @@
                 usbCameraPushManager.startPush(media);
             } else {
                 Timber.w("鎺ㄦ祦浠呮敮鎸乁SB鎽勫儚澶�");
-                notifyCallback(1, -4, "鎺ㄦ祦浠呮敮鎸乁SB鎽勫儚澶�");
+                notifyCallback(1, -4, "鎺ㄦ祦浠呮敮鎸乁SB鎽勫儚澶�",1);
             }
         } else {
             // 褰曞儚
@@ -353,10 +353,12 @@
      * @param type 绫诲瀷锛�0-褰曞儚 1-鎺ㄦ祦 2-鏂囦欢鍚嶇被鍨嬬瓑
      * @param errCode 閿欒鐮侊細0-鎴愬姛锛屽叾浠栦负閿欒鐮�
      * @param message 娑堟伅鍐呭
+     * @param cameraId 0-android camera 1-P1 usb 2-P2 usb
      */
-    private void notifyCallback(int type, int errCode, String message) {
+    private void notifyCallback(int type, int errCode, String message,int cameraId) {
         ResponseVO response = new ResponseVO();
         response.setType(type);
+        response.setCameraId(cameraId);
         response.setErrCode(errCode);
         response.setMessage(message);
         notifyCallback(response);
diff --git a/app/src/main/java/com/safeluck/floatwindow/ResponseVO.java b/app/src/main/java/com/safeluck/floatwindow/ResponseVO.java
index 804da90..fe0b8d1 100644
--- a/app/src/main/java/com/safeluck/floatwindow/ResponseVO.java
+++ b/app/src/main/java/com/safeluck/floatwindow/ResponseVO.java
@@ -11,6 +11,8 @@
  */
 public class ResponseVO implements Parcelable {
     private int type;//0-luxiang 1-鎺ㄦ祦 2-鏂囦欢鍚嶇被鍨嬶紙鍦╩essage閲岄潰灏辨槸鏂囦欢鍚嶏級
+
+    private int cameraId;// @param cameraId 0-鍐呯疆鎽勫儚澶达紙android camera锛� 1-P1 2-P2
     private String message;//鎻愮ず淇℃伅
     private int errCode;//0-鎴愬姛锛堟鍦ㄦ帹娴佹垨姝e湪褰曞儚锛�   1,娌℃湁澶栫疆sd鍗� 2.闀挎椂闂存柇缃� 3.鐭椂闂存柇缃戝拰缃戠粶鍒囨崲 4.鎺ㄦ祦缁撴潫銆佹垨褰曞儚缁撴潫 -1usbCamera鎵撲笉寮�,6-usbCamera瀹為檯浣跨敤鐨勫垎杈ㄧ巼锛堝寘鍚湪message锛� 7Dev锛堟湰鏈烘憚鍍忥級鍒嗚鲸鐜� 8.褰曞儚鏃堕暱  5-褰曞儚鐗囨缁撴潫  err:-3 msg:SystemError
 
@@ -30,6 +32,14 @@
         this.type = type;
     }
 
+    public int getCameraId() {
+        return cameraId;
+    }
+
+    public void setCameraId(int cameraId) {
+        this.cameraId = cameraId;
+    }
+
     public String getMessage() {
         return message;
     }
@@ -46,6 +56,7 @@
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeInt(this.type);
+        dest.writeInt(this.cameraId);
         dest.writeString(this.message);
         dest.writeInt(this.errCode);
     }
@@ -55,6 +66,7 @@
 
     protected ResponseVO(Parcel in) {
         this.type = in.readInt();
+        this.cameraId = in.readInt();
         this.message = in.readString();
         this.errCode = in.readInt();
     }
@@ -75,6 +87,7 @@
     public String toString() {
         return "ResponseVO{" +
                 "type=" + type +
+                "cameraId=" + cameraId +
                 ", message='" + message + '\'' +
                 ", errCode=" + errCode +
                 '}';
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 076ada8..b78ab51 100644
--- a/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraPushManager.java
+++ b/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraPushManager.java
@@ -97,9 +97,24 @@
     }
 
     /**
-     * 寮�濮嬫帹娴�
+     * 寮�濮嬫帹娴侊紙瀵瑰鎺ュ彛锛�
+     * 娉ㄦ剰锛欰livcLivePusher 蹇呴』鍦ㄤ富绾跨▼鍒濆鍖栵紝鍚﹀垯浼氭姏鍑�
+     * "Can't create handler inside thread that has not called Looper.prepare()"
      */
     public void startPush(MediaArgu media) {
+        // 纭繚鍦ㄤ富绾跨▼鎵ц瀹為檯鐨勫惎鍔ㄩ�昏緫
+        if (Looper.myLooper() == Looper.getMainLooper()) {
+            startPushInternal(media);
+        } else {
+            // 褰撳墠鏄� Binder 绾跨▼鎴栧叾浠栧悗鍙扮嚎绋嬶紝鍒囧埌涓荤嚎绋�
+            mainHandler.post(() -> startPushInternal(media));
+        }
+    }
+
+    /**
+     * 鐪熸鐨勫惎鍔ㄦ帹娴侀�昏緫锛屽繀椤诲湪涓荤嚎绋嬭皟鐢�
+     */
+    private void startPushInternal(MediaArgu media) {
         if (media == null) {
             notifyCallback(1, -1, "MediaArgu is null");
             return;
@@ -121,7 +136,7 @@
         }
 
         try {
-            // 鍒濆鍖栨帹娴丼DK
+            // 鍒濆鍖栨帹娴丼DK锛堟鏃跺凡淇濊瘉鍦ㄤ富绾跨▼锛�
             initAlivcPusher();
             setWaterMask();
             pushStarted = false;
@@ -135,7 +150,6 @@
 
             cameraExists = true;
             Timber.d("USB鎽勫儚澶存墦寮�鎴愬姛");
-
 
             notifyCallback(1, 0, "鎺ㄦ祦绾跨▼宸插惎鍔紝绛夊緟鎺ㄦ祦鐘舵�佸氨缁�");
         } catch (Exception e) {
@@ -767,6 +781,13 @@
             response.setType(type);
             response.setErrCode(errCode);
             response.setMessage(message);
+            // 璁剧疆 cameraId锛氭牴鎹� usbCameraId 鍖哄垎 P1(1) 鍜� P2(2)
+            if (mediaArgu != null) {
+                int usbCameraId = mediaArgu.getUsbCameraId();
+                response.setCameraId(usbCameraId == 2 ? 2 : 1); // 2 -> P2, 鍏朵粬 -> P1
+            } else {
+                response.setCameraId(1); // 榛樿 P1
+            }
             callback.onResult(response);
         }
     }
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 cb11b44..9d6bd0c 100644
--- a/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraRecordManager.java
+++ b/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraRecordManager.java
@@ -1011,6 +1011,13 @@
             response.setType(type);
             response.setErrCode(errCode);
             response.setMessage(message);
+            // 璁剧疆 cameraId锛氭牴鎹� usbCameraId 鍖哄垎 P1(1) 鍜� P2(2)
+            if (mediaArgu != null) {
+                int usbCameraId = mediaArgu.getUsbCameraId();
+                response.setCameraId(usbCameraId == 2 ? 2 : 1); // 2 -> P2, 鍏朵粬 -> P1
+            } else {
+                response.setCameraId(1); // 榛樿 P1
+            }
             callback.onResult(response);
         }
     }

--
Gitblit v1.8.0