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