1、解决使用 Cv2.ImShow 播放画面,闪烁一下窗口不见的问题
2、之前注册播放、分析帧,回调时必须判定是否当前注册源,现增加新方法可以不用判定 3、将之前程序一运行就播放,调整为手动指定 IsRunning 值来控制
This commit is contained in:
@@ -89,11 +89,11 @@ public class CameraManager : IDisposable, IAsyncDisposable
|
||||
// 1. 全局驱动环境预初始化:初始化厂商 SDK 运行环境
|
||||
HikSdkManager.Initialize();
|
||||
|
||||
// 2. 激活现有设备池中所有设备的“运行意图”,触发设备连接流程
|
||||
foreach (var source in _cameraPool.Values)
|
||||
{
|
||||
source.IsRunning = true;
|
||||
}
|
||||
//// 2. 激活现有设备池中所有设备的“运行意图”,触发设备连接流程
|
||||
//foreach (var source in _cameraPool.Values)
|
||||
//{
|
||||
// source.IsRunning = true;
|
||||
//}
|
||||
|
||||
// 标记引擎启动状态,后续新增设备自动激活
|
||||
_isEngineStarted = true;
|
||||
|
||||
@@ -66,6 +66,29 @@ public static class GlobalStreamDispatcher
|
||||
);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// [新增] 精准订阅:仅监听指定设备的特定 AppId 帧
|
||||
/// 优势:内部自动过滤 DeviceId,回调函数无需再写 if 判断
|
||||
/// </summary>
|
||||
/// <param name="appId">需求标识</param>
|
||||
/// <param name="specificDeviceId">只接收此设备的帧</param>
|
||||
/// <param name="handler">处理回调(注意:此处签名不含 deviceId,因为已隐式确定)</param>
|
||||
public static void Subscribe(string appId, long specificDeviceId, Action<SmartFrame> handler)
|
||||
{
|
||||
// 创建一个“过滤器”闭包
|
||||
Action<long, SmartFrame> wrapper = (id, frame) =>
|
||||
{
|
||||
// 只有当来源 ID 与订阅 ID 一致时,才触发用户的业务回调
|
||||
if (id == specificDeviceId)
|
||||
{
|
||||
handler(frame);
|
||||
}
|
||||
};
|
||||
|
||||
// 将过滤器注册到基础路由表中
|
||||
Subscribe(appId, wrapper);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 取消订阅:移除指定 AppId 的帧处理回调
|
||||
/// 线程安全:支持多线程并发调用,无订阅时静默处理
|
||||
|
||||
Reference in New Issue
Block a user