Files

91 lines
3.8 KiB
C#
Raw Permalink Normal View History

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