国标GB28181协议客户端EasyGBS视频平台如何优化告警功能接收数据的频率?
程序员文章站
2022-07-06 09:39:10
...
目前国标视频平台EasyGBS的告警功能已经研发了,我们也进入了内测阶段,测试无误后将会给最新版的EasyGBS添加这个模块,让使用体验更好。
测试的时候,我们发现一个问题,就是当摄像头设置报警事件后,触发过于敏感,发生一次告警事件,摄像头会向EasyGBS平台发送大概6条数据。
因为摄像头告警的时候,需要平台去进行拉流,然后截取快照,比较消耗性能。当告警数据传输过多的时候,EasyGBS平台的运行负荷将会加重,所以需要我们继续优化。
经过商讨和测试,我们决定当设备触发告警事件并向EasyGBS平台发送数据的时候,对EasyGBS平台对接收到的数据进行限制频率操作。
var RequestLimit = &RequestLimitService{}
type RequestLimitService struct {
Interval time.Duration
MaxCount int
Lock sync.Mutex
ReqCount int
Stop bool
}
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调用以下代码进行频率限制
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接口;
- 云台控制:基于动态组网服务创建智能网络,按需选择需要组网的网络成员实现点点互联。