feat: 现在停止视频流会使摄像头休眠,配置过程会唤醒,配置完后再休眠
This commit is contained in:
parent
938ee80979
commit
a28ae9be97
|
@ -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 自动对焦功能
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue