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