feat: 现在停止视频流会使摄像头休眠,配置过程会唤醒,配置完后再休眠

This commit is contained in:
alivender 2025-07-15 18:35:14 +08:00
parent 938ee80979
commit a28ae9be97
2 changed files with 17 additions and 22 deletions

View File

@ -61,9 +61,8 @@ class Camera
var resetResult = await Reset(); var resetResult = await Reset();
if (!resetResult.IsSuccessful) return resetResult; if (!resetResult.IsSuccessful) return resetResult;
// 步骤2: 休眠 var wakeupResult = await WakeUp();
var sleepResult = await Sleep(); if (!wakeupResult.IsSuccessful) return wakeupResult;
if (!sleepResult.IsSuccessful) return sleepResult;
// 步骤3: 配置基础寄存器 // 步骤3: 配置基础寄存器
var basicResult = await ConfigureBasicRegisters(); var basicResult = await ConfigureBasicRegisters();
@ -138,13 +137,14 @@ class Camera
if (!testResult.IsSuccessful) return testResult; if (!testResult.IsSuccessful) return testResult;
// 步骤21: 配置分辨率默认640x480 // 步骤21: 配置分辨率默认640x480
// var resolutionResult = await ConfigureResolution640x480(); var resolutionResult = await ConfigureResolution640x480();
var resolutionResult = await ConfigureResolution1280x720(); // var resolutionResult = await ConfigureResolution1280x720();
if (!resolutionResult.IsSuccessful) return resolutionResult; if (!resolutionResult.IsSuccessful) return resolutionResult;
// // 步骤22: 开始流 // var startResult = await WakeUp();
var startResult = await StartStreaming(); // if (!startResult.IsSuccessful) return startResult;
if (!startResult.IsSuccessful) return startResult; var sleepResult = await Sleep();
if (!sleepResult.IsSuccessful) return sleepResult;
// var resetResult2 = await Reset(); // var resetResult2 = await Reset();
// if (!resetResult2.IsSuccessful) return resetResult2; // if (!resetResult2.IsSuccessful) return resetResult2;
@ -293,16 +293,8 @@ class Camera
} }
else else
{ {
// 使用默认延时逻辑 // 默认延时逻辑每个寄存器写入后延时1毫秒
if (address == 0x3008 && cmd.Length >= 2 && cmd[1] == 0x82) await Task.Delay(1);
{
// 复位命令等待5MS
await Task.Delay(5);
}
else
{
await Task.Delay(5); // 其他命令延时3ms
}
} }
} }
return true; return true;
@ -493,6 +485,7 @@ class Camera
{ {
try try
{ {
await WakeUp();
logger.Info($"正在切换摄像头分辨率到 {width}x{height}"); logger.Info($"正在切换摄像头分辨率到 {width}x{height}");
Result<bool> result; Result<bool> result;
@ -516,7 +509,7 @@ class Camera
_currentFrameLength = (UInt32)(width * height * 2 / 4); // RGB565格式按4字节对齐 _currentFrameLength = (UInt32)(width * height * 2 / 4); // RGB565格式按4字节对齐
logger.Info($"摄像头分辨率已切换到 {width}x{height}"); logger.Info($"摄像头分辨率已切换到 {width}x{height}");
} }
await Sleep();
return result; return result;
} }
catch (Exception ex) catch (Exception ex)
@ -570,7 +563,7 @@ class Camera
[0x3008, 0x42] // 休眠命令 [0x3008, 0x42] // 休眠命令
}; };
return await ConfigureRegisters(sleepRegisters); return await ConfigureRegisters(sleepRegisters, customDelayMs: 50);
} }
/// <summary> /// <summary>
@ -949,14 +942,14 @@ class Camera
/// 开始流媒体传输 /// 开始流媒体传输
/// </summary> /// </summary>
/// <returns>配置结果</returns> /// <returns>配置结果</returns>
public async ValueTask<Result<bool>> StartStreaming() public async ValueTask<Result<bool>> WakeUp()
{ {
var startRegisters = new UInt16[][] var startRegisters = new UInt16[][]
{ {
[0x3008, 0x02] // 开始流 [0x3008, 0x02] // 开始流
}; };
return await ConfigureRegisters(startRegisters); return await ConfigureRegisters(startRegisters, customDelayMs: 50);
} }
#region #region

View File

@ -156,6 +156,8 @@ public class HttpVideoStreamService : BackgroundService
throw new Exception("Please config camera first"); throw new Exception("Please config camera first");
} }
_cameraEnable = isEnabled; _cameraEnable = isEnabled;
if (_cameraEnable) await _camera.WakeUp();
else await _camera.Sleep();
await _camera.EnableHardwareTrans(_cameraEnable); await _camera.EnableHardwareTrans(_cameraEnable);
} }