国标GB28181协议客户端EasyGBS视频平台如何优化告警功能接收数据的频率?
目前国标视频平台EasyGBS的告警功能已经研发了,我们也进入了内测阶段,测试无误后将会给最新版的EasyGBS添加这个模块,让使用体验更好。
测试的时候,我们发现一个问题,就是当摄像头设置报警事件后,触发过于敏感,发生一次告警事件,摄像头会向EasyGBS平台发送大概6条数据。
因为摄像头告警的时候,需要平台去进行拉流,然后截取快照,比较消耗性能。当告警数据传输过多的时候,EasyGBS平台的运行负荷将会加重,所以需要我们继续优化。
经过商讨和测试,我们决定当设备触发告警事件并向EasyGBS平台发送数据的时候,对EasyGBS平台对接收到的数据进行限制频率操作。
1 2 3 4 5 6 7 8 | var RequestLimit = &RequestLimitService{} type RequestLimitService struct { Interval time.Duration MaxCount int Lock sync.Mutex ReqCount int Stop bool } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | func NewRequestLimitService(interval time.Duration, maxCnt int ) { RequestLimit = &RequestLimitService{ Interval: interval, MaxCount: maxCnt, } go func() { ticker := time.NewTicker(interval) for { //if !reqLimit.Stop { <-ticker.C RequestLimit.Lock.Lock() fmt.Println( "Reset Count..." ) RequestLimit.ReqCount = 0 RequestLimit.Lock.Unlock() //} else { // log.Printf("") // return //} } }() return } |
EasyGBS调用以下代码进行频率限制
1 2 3 4 5 6 7 8 | if RequestLimit.IsAvailable() { RequestLimit.Increase() fmt.Println(RequestLimit.ReqCount) } else { fmt.Println( "Reach request limiting!" ) return } |
优化过后当摄像头再向设备发送多条数据后,EasyGBS就可以进行选择性接收了,从而降低平台的性能消耗。
以上是我们对EasyGBS告警功能做出的优化,如果大家对平台的优化还有建议的话,我们也会在考虑可行性的情况下进行升级改版。
更多关于EasyGBS:
- 可视化页面:提供用户管理及Web可视化页面管理,及录像检索、回放;
- 设备状态管理:提供设备状态管理,可实时查看设备是否掉线等信息;
- 实时流处理:实时流媒体处理,PS(TS)转ES,提供音视频转码能力;
- API接口:对外提供服务器获取状态、信息,控制HTTP API接口;
- 云台控制:基于动态组网服务创建智能网络,按需选择需要组网的网络成员实现点点互联。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结