国标GB28181协议流媒体视频平台EasyGBS告警信息和告警视频如何实现对应?
之前的博文中我们讲到EasyGBS视频平台已经开发了告警功能,当监测有异常情况时,系统就会自动截取快照并记录时间。但是该功能在实际上线之前,也曾碰到过一些问题,比如告警截取视频的时候出现视频和告警记录对不上的情况。今天就跟大家一起分享下开发过程中问题的解决方法。
因为告警信息是实时的,而视频是需要EasyGBS平台来保存的。存取视频是保存在告警信息来的20秒之后,这时保存的这个视频会和告警记录有一个时间差,而在这个时间差里,可能产生了新的告警信息,所以告警记录和视频会产生偏差。
如何避免这种偏差?我们选择了给告警视频赋予标识的方法,也就是在添加存储告警视频的时候传入告警记录的id,将告警视频和告警记录一一对应起来。以下为参考代码:
modelsAlarm := &models.Alarm{
DeviceID: serial,
ChannelID: deviceId,
DeviceName: device.Name,
ChannelName: channels.Name,
AlarmPriority: alarmPriority,
AlarmTime: aTime,
AlarmMethod: alarmMethod,
AlarmType: alarmType,
AlarmSnap: "",
}
db.SQLite.Create(modelsAlarm)
fmt.Println(modelsAlarm.ID)
go doAlarmSnap(c, *channels, serial, modelsAlarm.ID)
然后再保存的视频文件名字添加告警id信息。
alarmRecordKey := fmt.Sprintf("alarm_record_%s_%s", msess.GetDeviceID(), msess.GetChannelID())
alarmRecordURL := fmt.Sprintf("/alarmrecords/alarm_%d_record_%s_%s.mp4", msess.AlarmID, msess.GetDeviceID(), msess.GetChannelID())
oldFileName := fmt.Sprintf("alarm_%d_record_%s_%s.h264", msess.AlarmID, msess.GetDeviceID(), msess.GetChannelID())
newFileName := fmt.Sprintf("alarm_%d_record_%s_%s.mp4", msess.AlarmID, msess.GetDeviceID(), msess.GetChannelID())
var alarmRecord = redis.Client.Get(alarmRecordKey).Val()
if alarmRecord != "" {
inFile := filepath.Join(utils.DataDir(), "alarmrecords", oldFileName)
outFile := filepath.Join(utils.DataDir(), "alarmrecords", newFileName)
if _, err := os.Stat(inFile); os.IsNotExist(err) {
sms_log.Log.Printf("alarm record h264 to mp4 error, %v", err)
}
ff.H264ToMP4(inFile, outFile)
redis.Client.Del(alarmRecordKey)
err := models.UpdateAlarmRecord(msess.AlarmID, alarmRecordURL)
if err != nil {
sms_log.Log.Printf("alarm record end error, %v", err)
}
msess.AlarmID = 0
if err := os.Remove(inFile); err != nil {
log.Println(err)
}
以上两段代码添加之后,保存下来的视频文件信息就是携带告警id的,就能够和告警的记录对应上了。
告警功能的开发不仅仅是为了让运维人员能够第一时间了解到重要警报,同时还为报警联动的开发带来了新的方向,报警系统被触发后,报警主机给一个信号到联动模块从而打开监控设备和探照灯,监控设备与监控主机的AI(模拟量输入)或DI(开关量输入)通道连接,监控主机一旦收到监控设备的报警信号(模拟量报警的机制即是电压超出事先设定的阈值范围产生报警。
在后期TSINGSEE青犀视频研发团队也会完善国标GB28181视频平台EasyGBS视频平台报警联动的功能,将EasyGBS功能做到最优。
EasyDarwin是国内视频流媒体团队TSINGSEE青犀视频开发和维护的开源社区。从2012年12月创建并发展至今,从原有的单服务的流媒体服务器形式,扩展成现在的云平台架构的开源项目。
上一篇: 深度学习入门基于Python的理论与实现_第一章_Python入门
下一篇: 海康大华宇视摄像机硬件NVR接入GB/T28181国标流媒体平台LiveGBS如何获取对应的直播流地址HLS/HTTP-FLV/WS-FLV/RTMP/RTSP
推荐阅读
-
国标GB28181协议视频平台EasyGBS实现告警功能,自动截取快照
-
国标GB28181协议客户端EasyGBS视频平台如何优化告警功能接收数据的频率?
-
国标GB28181协议客户端EasyGBS国标视频平台级联EasyNVR:EasyGBS如何实现调阅EasyNVR的视频通道?
-
国标GB28181协议客户端EasyGBS如何实现调阅EasyNVR视频平台的视频?
-
国标GB28181流媒体协议客户端EasyGBS视频平台权限功能的实现
-
RTSP协议网络摄像头视频云服务平台EasyNVR通过国标GB28181协议级联到EasyGBS通道播放视频无法对应如何解决?
-
国标GB28181协议流媒体视频平台EasyGBS告警信息和告警视频如何实现对应?
-
国标GB28181流媒体服务解决方案4G安防摄像头直播视频流媒体平台EasyGBS的libuv库通信协议封装-支持udp和tcpserver同时使用
-
国标GB28181协议网络摄像头直播视频平台EasyGBS如何实现语音对讲功能?
-
国标GB28181协议IP摄像头/录像机接入视频平台EasyGBS出现告警信息,但是不上报是什么原因?