namespace SHH.CameraSdk; /// /// [核心契约] 工业级视频源接口 (V3.3.1 终极定稿) /// 核心职责:定义所有视频源设备的标准化生命周期、状态观测与数据分发能力 /// 关键修复: /// 1. [Fix Bug δ] 新增 UpdateConfig 接口,支持运行时配置热更新 /// 2. 强化资源管理契约:继承 IDisposable/IAsyncDisposable,规范非托管资源释放 /// 适用场景:海康/大华/宇视等不同品牌相机的驱动适配、统一管理 /// public interface IVideoSource : IDisposable, IAsyncDisposable { #region --- 1. 只读属性 (设备标识与状态观测) --- /// 设备唯一业务标识(全局唯一,如数据库自增ID) long Id { get; } /// 设备详细逻辑状态(如 Idle/Connecting/Playing/Faulted) VideoSourceStatus Status { get; } /// 用户意图标识:是否需要保持设备运行状态 bool IsRunning { get; set; } /// 设备物理在线状态(基于心跳/探测的实时感知结果) bool IsOnline { get; } /// 设备能力元数据(只读,如分辨率、码流类型、支持的功能集) DeviceMetadata Metadata { get; } #endregion #region --- 2. 事件契约 (数据分发与状态通知) --- /// /// 视频帧接收事件(热路径,高频触发) /// /// /// 1. 载荷类型:通常为 对象 /// 2. 内存管理:订阅者必须负责载荷对象的 Dispose 操作,否则会导致内存泄漏 /// 3. 性能约束:事件处理逻辑需控制在 10ms 内,避免阻塞取流线程 /// event Action? FrameReceived; /// /// 设备状态变更通知事件(结构化状态同步) /// /// 携带状态变更前后的详细信息,用于监控告警、日志记录 event EventHandler StatusChanged; #endregion #region --- 3. 核心方法 (生命周期与配置管理) --- /// /// 异步启动设备(完整流程:连接设备 → 登录鉴权 → 启动码流接收) /// /// 设备状态非法时抛出 /// SDK 通信失败时抛出 Task StartAsync(); /// /// 异步停止设备(完整流程:停止码流 → 登出设备 → 释放连接资源) /// Task StopAsync(); /// /// [Fix Bug δ] 运行时更新设备配置 /// /// 新的设备配置(如 IP、端口、用户名密码) /// /// 1. 生效机制:新配置不会立即生效,将在下次启动或自动重连时应用 /// 2. 原子性保证:配置更新为原子操作,不会出现部分生效的情况 /// 3. 适用场景:设备 IP 变更、密码修改等运维场景 /// void UpdateConfig(VideoSourceConfig newConfig); /// /// 应用动态流配置补丁(无需重启,实时生效) /// /// 动态流参数(如主码流/子码流切换、分辨率调整) /// 适用于运行时按需调整码流参数,降低带宽占用 void ApplyOptions(DynamicStreamOptions options); /// /// 强制刷新设备元数据,并返回元数据变更差异 /// /// 元数据变更差异对象(如分辨率变化、功能集变化) Task RefreshMetadataAsync(); #endregion }