From 7923221a07a752b370f9592ef43e54531f110822 Mon Sep 17 00:00:00 2001
From: Dana <Dana_Lee1016@126.com>
Date: 星期三, 28 一月 2026 15:56:39 +0800
Subject: [PATCH] 1.usb录像加水印。 推流、录像都有水印;结束时也结束水印线程
---
app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraPushManager.java | 36 +++++++++++++++++++++++++++++++++++-
1 files changed, 35 insertions(+), 1 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 6997f18..fb85f0f 100644
--- a/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraPushManager.java
+++ b/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraPushManager.java
@@ -15,6 +15,7 @@
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
import com.alivc.live.pusher.AlivcAudioAACProfileEnum;
@@ -150,6 +151,7 @@
Timber.d("stopPush called");
stopPushThread();
// stopAudioTransfer();
+ stopWaterMaskSchedule();
releaseAlivcPusher();
if (usbCamera != null) {
usbCamera.stopCamera();
@@ -282,7 +284,15 @@
private ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
private void setWaterMask() {
- scheduledExecutorService.scheduleWithFixedDelay(() -> {
+ // 闃叉閲嶅 schedule锛坰tartPush 鍙兘琚娆¤皟鐢級
+ if (watermarkFuture != null && !watermarkFuture.isCancelled()) {
+ return;
+ }
+ if (scheduledExecutorService == null || scheduledExecutorService.isShutdown()) {
+ scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
+ }
+
+ watermarkFuture = scheduledExecutorService.scheduleWithFixedDelay(() -> {
if (pushStarted){
@@ -350,6 +360,28 @@
}
},1,1, TimeUnit.SECONDS);
+ }
+
+ private ScheduledFuture<?> watermarkFuture;
+
+ private void stopWaterMaskSchedule() {
+ try {
+ if (watermarkFuture != null) {
+ watermarkFuture.cancel(true);
+ watermarkFuture = null;
+ }
+ } catch (Throwable t) {
+ Timber.w(t, "cancel watermarkFuture failed");
+ }
+ try {
+ if (scheduledExecutorService != null && !scheduledExecutorService.isShutdown()) {
+ scheduledExecutorService.shutdownNow();
+ }
+ } catch (Throwable t) {
+ Timber.w(t, "shutdown watermark scheduledExecutorService failed");
+ } finally {
+ scheduledExecutorService = null;
+ }
}
private Handler mainHandler = new Handler(Looper.getMainLooper());
@@ -610,6 +642,8 @@
* 閲婃斁闃块噷鎺ㄦ祦璧勬簮
*/
private void releaseAlivcPusher() {
+ // 鍏滃簳锛氶槻姝㈠閮ㄦ病鏈夎蛋 stopPush
+ stopWaterMaskSchedule();
// 绉婚櫎闅愯棌鐨� SurfaceView
if (previewSurfaceView != null && windowManager != null) {
try {
--
Gitblit v1.8.0