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