修复由于流控导致的帧率降低,由于摄像头过来的帧不是平均的 40ms 一帧,所以需要容错

This commit is contained in:
2025-12-26 13:38:28 +08:00
parent 365e63c21a
commit 93782bcdf1
3 changed files with 73 additions and 64 deletions

View File

@@ -114,6 +114,9 @@ public abstract class BaseVideoSource : IVideoSource, IAsyncDisposable
/// <summary> 上次 FPS 计算的 Tick 时间 </summary>
private long _lastFpsCalcTick = 0;
// 提供一个最近一秒的输入帧率参考值
public int NominalInputFps => (int)Math.Round(RealFps);
/// <summary> 实时 FPS每秒更新一次 </summary>
public double RealFps { get; private set; } = 0.0;

View File

@@ -297,7 +297,8 @@ public class HikVideoSource : BaseVideoSource
{
// 1. [核心流控] 询问基类控制器:这帧要不要?
// 之前失效是因为操作的是子类被遮蔽的 Controller现在复用基类 Controller逻辑就通了。
var decision = Controller.MakeDecision(Environment.TickCount64);
// 传入真实的输入帧率作为参考基准
var decision = Controller.MakeDecision(Environment.TickCount64, (int)RealFps);
// 如果没人要,直接丢弃,不进行 Mat 转换,节省 CPU
if (!decision.IsCaptured) return;