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();
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<bool> 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);
}
/// <summary>
@ -949,14 +942,14 @@ class Camera
/// 开始流媒体传输
/// </summary>
/// <returns>配置结果</returns>
public async ValueTask<Result<bool>> StartStreaming()
public async ValueTask<Result<bool>> WakeUp()
{
var startRegisters = new UInt16[][]
{
[0x3008, 0x02] // 开始流
};
return await ConfigureRegisters(startRegisters);
return await ConfigureRegisters(startRegisters, customDelayMs: 50);
}
#region

View File

@ -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);
}