From fa4b2286ed45545efeee41d10e7a5bac76811232 Mon Sep 17 00:00:00 2001
From: Dana <Dana_Lee1016@126.com>
Date: 星期三, 28 一月 2026 13:33:42 +0800
Subject: [PATCH] 1.usb 推流添加声音
---
app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraPushManager.java | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 57 insertions(+), 0 deletions(-)
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 97ba0b8..a43aef8 100644
--- a/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraPushManager.java
+++ b/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraPushManager.java
@@ -7,6 +7,9 @@
import android.view.SurfaceView;
import android.view.WindowManager;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
import com.alivc.live.pusher.AlivcAudioAACProfileEnum;
import timber.log.Timber;
import com.alivc.live.pusher.AlivcEncodeModeEnum;
@@ -26,6 +29,7 @@
import com.anyun.libusbcamera.UsbCamera;
import com.safeluck.floatwindow.MediaArgu;
import com.safeluck.floatwindow.ResponseVO;
+import com.safeluck.floatwindow.util.AudioRecordManager;
/**
* USB鎽勫儚澶存帹娴佺鐞嗗櫒
@@ -60,6 +64,9 @@
// 棰勮 SurfaceView 鍜岄殣钘忕殑 Window
private WindowManager windowManager;
+
+ // 闊抽鎺ㄦ祦绾跨▼姹狅紙鍗曠嚎绋嬶級
+ private ExecutorService audioPushExecutor;
/**
* 鎺ㄦ祦鍥炶皟鎺ュ彛
@@ -132,6 +139,7 @@
public void stopPush() {
Timber.d("stopPush called");
stopPushThread();
+ stopAudioTransfer();
releaseAlivcPusher();
if (usbCamera != null) {
usbCamera.stopCamera();
@@ -293,6 +301,7 @@
public void onPushStarted(AlivcLivePusher alivcLivePusher) {
Timber.d("onPushStarted");
pushStarted = true;
+ startAudioTransfer();
notifyCallback(1, 0, "鎺ㄦ祦宸插紑濮嬶紝鍒嗚鲸鐜�: " + resolutionArr[0] + "x" + resolutionArr[1]);
}
@@ -624,4 +633,52 @@
callback.onResult(response);
}
}
+
+
+ private void startAudioTransfer() {
+ Timber.i("寮�濮嬮�氳繃mic褰曞埗澹伴煶锛屼笂浼�");
+
+ // 鍒涘缓鍗曠嚎绋嬬嚎绋嬫睜鐢ㄤ簬闊抽鎺ㄦ祦
+ if (audioPushExecutor == null || audioPushExecutor.isShutdown()) {
+ audioPushExecutor = Executors.newSingleThreadExecutor(r -> {
+ Thread thread = new Thread(r, "AudioPushThread");
+ thread.setDaemon(true);
+ return thread;
+ });
+ }
+
+ AudioRecordManager.getInstance().startRecording((data, size) -> {
+ if (alivcPusher != null && audioPushExecutor != null && !audioPushExecutor.isShutdown()) {
+ // 鍦ㄥ崟绾跨▼绾跨▼姹犱腑鎵ц闊抽鎺ㄦ祦
+ audioPushExecutor.execute(() -> {
+ try {
+ alivcPusher.inputStreamAudioData(data, data.length, System.nanoTime() / 1000);
+ } catch (Exception e) {
+ Timber.e(e, "Error pushing audio data");
+ }
+ });
+ }
+ });
+ }
+
+ private void stopAudioTransfer() {
+ Timber.i("鍋滄閫氳繃mic褰曞埗澹伴煶锛屼笂浼�");
+ AudioRecordManager.getInstance().stopRecording();
+
+ // 鍋滄骞跺叧闂煶棰戞帹娴佺嚎绋嬫睜
+ if (audioPushExecutor != null && !audioPushExecutor.isShutdown()) {
+ audioPushExecutor.shutdown();
+ try {
+ // 绛夊緟鏈�澶�1绉掕浠诲姟瀹屾垚
+ if (!audioPushExecutor.awaitTermination(1, java.util.concurrent.TimeUnit.SECONDS)) {
+ audioPushExecutor.shutdownNow();
+ }
+ } catch (InterruptedException e) {
+ audioPushExecutor.shutdownNow();
+ Thread.currentThread().interrupt();
+ }
+ audioPushExecutor = null;
+ Timber.d("闊抽鎺ㄦ祦绾跨▼姹犲凡鍏抽棴");
+ }
+ }
}
--
Gitblit v1.8.0