随笔 - 936  文章 - 0  评论 - 3  阅读 - 30万

国标GB28181协议视频平台EasyGBS实现告警功能,可自动截取快照

大家千呼万唤的告警功能终于在EasyGBS平台实现了。之前在做项目的时候,TSINGSEE就接到了很多用户告警功能的需求。在一段时间的努力研发之后,EasyGBS终于实现了识别告警功能,具体效果如下所示:

当监测有异常情况时,系统就会自动截取快照并记录时间。

但是我们发现在摄像头发送告警信息过来时,系统同时也会对未开启视频推流的摄像头发送推流请求,以下为推流请求代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
func doAlarmSnap(c *sip.Context, channels models.Channel, serial string) (err error) {
    _sipDev, _ := c.Server.DevCache.Get(serial)
    locker := channels.Lock()
    if locker == nil {
        err = fmt.Errorf("alarm snap channel[%s:%s] is busy", channels.DeviceID, channels.ID)
        return
    }
    if sipDev, ok := _sipDev.(*sip.Device); ok {
        SnapStart(sipDev, channels.ToSIPChannel(), 10*time.Second)
    }
    defer locker.Unlock()
    return
}
  
reqInviteMS, err := Server.MakeRequest("INVITE", toMS, "")
    if err != nil {
        return
    }

  

只要这个请求一发出去,系统推流请求就会卡住不再返回信息流

经过我们的排查,发现是调用快照的方法给摄像头发送推流请求时,系统没有进行多线程操作,导致同时发送请求给多个摄像头调取快照,而未推流的摄像头由于没有快照,系统收不到返回信息流,就会卡住。

我们需要在go中进行多线程操作,及添加关键字go(启用go关键字后程序会新开一个goroutine 创建一个并发任务进行执行)

1
2
3
4
5
6
7
8
9
10
11
12
13
db.SQLite.Create(&models.Alarm{
            DeviceID:      serial,
            ChannelID:     deviceId,
            DeviceName:    device.Name,
            ChannelName:   channels.Name,
            AlarmPriority: alarmPriority,
            AlarmTime:     aTime,
            AlarmMethod:   alarmMethod,
            AlarmType:     alarmType,
            AlarmSnap:     "",
        })
        go doAlarmSnap(c, *channels, serial)
再次播放和运动检测截图显示正常。

  

再次播放和运动检测截图显示正常。

posted on   EasyGBS  阅读(428)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 提示词工程——AI应用必不可少的技术
· 字符编码:从基础到乱码解决
· 地球OL攻略 —— 某应届生求职总结
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示