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/UsbCameraRecordManager.java | 36 +++++++++++++++++++++++++++++++++++-
1 files changed, 35 insertions(+), 1 deletions(-)
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 5b36a5e..b8f0b8a 100644
--- a/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraRecordManager.java
+++ b/app/src/main/java/com/safeluck/floatwindow/manager/UsbCameraRecordManager.java
@@ -28,6 +28,7 @@
import java.util.Date;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
/**
@@ -146,9 +147,18 @@
int baseY = 20;
int fontSize= 24;
private ScheduledExecutorService scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
+ private ScheduledFuture<?> watermarkFuture;
private void setWaterMask() {
- scheduledExecutorService.scheduleWithFixedDelay(() -> {
+ // 闃叉閲嶅 schedule锛坰tartRecord 鍙兘琚娆¤皟鐢級
+ if (watermarkFuture != null && !watermarkFuture.isCancelled()) {
+ return;
+ }
+ if (scheduledExecutorService == null || scheduledExecutorService.isShutdown()) {
+ scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();
+ }
+
+ watermarkFuture = scheduledExecutorService.scheduleWithFixedDelay(() -> {
@@ -216,6 +226,26 @@
},1,1, TimeUnit.SECONDS);
}
+ 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;
+ }
+ }
+
/**
@@ -223,6 +253,8 @@
*/
public void stopRecord() {
Timber.d("stopRecord called");
+
+ stopWaterMaskSchedule();
// 鍋滄闊抽绾跨▼
if (audioThread != null) {
@@ -351,6 +383,8 @@
* 閲婃斁璧勬簮
*/
private void releaseResources() {
+ // 鍏滃簳锛氶槻姝㈠紓甯搁��鍑烘椂姘村嵃绾跨▼娉勯湶
+ stopWaterMaskSchedule();
if (audioRecord != null) {
try {
if (audioRecord.getRecordingState() == AudioRecord.RECORDSTATE_RECORDING) {
--
Gitblit v1.8.0