From a28ae9be97c09f8e1aa5cc682b0d5fededf49e5c Mon Sep 17 00:00:00 2001 From: alivender <13898766233@163.com> Date: Tue, 15 Jul 2025 18:35:14 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=8E=B0=E5=9C=A8=E5=81=9C=E6=AD=A2?= =?UTF-8?q?=E8=A7=86=E9=A2=91=E6=B5=81=E4=BC=9A=E4=BD=BF=E6=91=84=E5=83=8F?= =?UTF-8?q?=E5=A4=B4=E4=BC=91=E7=9C=A0=EF=BC=8C=E9=85=8D=E7=BD=AE=E8=BF=87?= =?UTF-8?q?=E7=A8=8B=E4=BC=9A=E5=94=A4=E9=86=92=EF=BC=8C=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=AE=8C=E5=90=8E=E5=86=8D=E4=BC=91=E7=9C=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/src/Peripherals/CameraClient.cs | 37 ++++++++----------- server/src/Services/HttpVideoStreamService.cs | 2 + 2 files changed, 17 insertions(+), 22 deletions(-) diff --git a/server/src/Peripherals/CameraClient.cs b/server/src/Peripherals/CameraClient.cs index b402841..bf39a6a 100644 --- a/server/src/Peripherals/CameraClient.cs +++ b/server/src/Peripherals/CameraClient.cs @@ -61,9 +61,8 @@ class Camera var resetResult = await Reset(); if (!resetResult.IsSuccessful) return resetResult; - // 步骤2: 休眠 - var sleepResult = await Sleep(); - if (!sleepResult.IsSuccessful) return sleepResult; + var wakeupResult = await WakeUp(); + if (!wakeupResult.IsSuccessful) return wakeupResult; // 步骤3: 配置基础寄存器 var basicResult = await ConfigureBasicRegisters(); @@ -138,13 +137,14 @@ class Camera if (!testResult.IsSuccessful) return testResult; // 步骤21: 配置分辨率(默认640x480) - // var resolutionResult = await ConfigureResolution640x480(); - var resolutionResult = await ConfigureResolution1280x720(); + var resolutionResult = await ConfigureResolution640x480(); + // var resolutionResult = await ConfigureResolution1280x720(); if (!resolutionResult.IsSuccessful) return resolutionResult; - // // 步骤22: 开始流 - var startResult = await StartStreaming(); - if (!startResult.IsSuccessful) return startResult; + // var startResult = await WakeUp(); + // if (!startResult.IsSuccessful) return startResult; + var sleepResult = await Sleep(); + if (!sleepResult.IsSuccessful) return sleepResult; // var resetResult2 = await Reset(); // if (!resetResult2.IsSuccessful) return resetResult2; @@ -293,16 +293,8 @@ class Camera } else { - // 使用默认延时逻辑 - if (address == 0x3008 && cmd.Length >= 2 && cmd[1] == 0x82) - { - // 复位命令,等待5MS - await Task.Delay(5); - } - else - { - await Task.Delay(5); // 其他命令延时3ms - } + // 默认延时逻辑:每个寄存器写入后延时1毫秒 + await Task.Delay(1); } } return true; @@ -493,6 +485,7 @@ class Camera { try { + await WakeUp(); logger.Info($"正在切换摄像头分辨率到 {width}x{height}"); Result result; @@ -516,7 +509,7 @@ class Camera _currentFrameLength = (UInt32)(width * height * 2 / 4); // RGB565格式,按4字节对齐 logger.Info($"摄像头分辨率已切换到 {width}x{height}"); } - + await Sleep(); return result; } catch (Exception ex) @@ -570,7 +563,7 @@ class Camera [0x3008, 0x42] // 休眠命令 }; - return await ConfigureRegisters(sleepRegisters); + return await ConfigureRegisters(sleepRegisters, customDelayMs: 50); } /// @@ -949,14 +942,14 @@ class Camera /// 开始流媒体传输 /// /// 配置结果 - public async ValueTask> StartStreaming() + public async ValueTask> WakeUp() { var startRegisters = new UInt16[][] { [0x3008, 0x02] // 开始流 }; - return await ConfigureRegisters(startRegisters); + return await ConfigureRegisters(startRegisters, customDelayMs: 50); } #region 自动对焦功能 diff --git a/server/src/Services/HttpVideoStreamService.cs b/server/src/Services/HttpVideoStreamService.cs index e6209d2..396926d 100644 --- a/server/src/Services/HttpVideoStreamService.cs +++ b/server/src/Services/HttpVideoStreamService.cs @@ -156,6 +156,8 @@ public class HttpVideoStreamService : BackgroundService throw new Exception("Please config camera first"); } _cameraEnable = isEnabled; + if (_cameraEnable) await _camera.WakeUp(); + else await _camera.Sleep(); await _camera.EnableHardwareTrans(_cameraEnable); }