Dana
7 天以前 7923221a07a752b370f9592ef43e54531f110822
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(startPush 可能被多次调用)
        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 {