国标GB28181协议国标视频平台EasyGBS修改云端录像不起效是什么原因?
程序员文章站
2022-07-06 09:34:04
...
最近我们研发花了很大精力在国标平台EasyGBS上,由于EasyGBS近期更新版本的原因,很多功能都做了调整,因此我们也在不断的调试当中,确保功能的正常使用。
近期我们在做EasyGBS云端录像的时候就发现一个问题,即云端录像设置好天数之后,再次修改录像天数时,就不起作用了。然而理论上这个修改应该是随时生效的。
经过排查代码发现,在设置好录像天数之后,再次将录像天数设置成0,表面上停止了录像清理,实质是录像清理的定时器并没有删除。
原因是channel结构体中设置的停止通知通道,是私有变量,两次赋值之后再取值得到的并不准确,所以导致停止之后,实质上的定时器仍在执行。
func (channel *Channel) StopTicker() {
if channel.quit != nil {
channel.quit <- true
}
}
func (channel *Channel) DoTicker() {
if channel.quit == nil {
channel.quit = make(chan bool)
} else {
return
}
channel.cleanRecordTime = time.Now()
ticker := time.NewTicker(10 * time.Second)
defer ticker.Stop()
for {
select {
case <-ticker.C:
thisTime := time.Now()
if channel.GetRecordReserveDuration() > 0 && thisTime.After(channel.cleanRecordTime.Add(60*time.Second)) {
channel.CleanRecord()
}
case <-channel.quit:
return
}
}
}
所以修改通知停止的录像为一个map,在开始录像的时候将通道的id作为key存入map中,停止录像的时候删除key。每次进行录像清理的时候判断map中的key是否存在。
var atsMap sync.Map
func (channel *Channel) DoTicker() {
key := fmt.Sprintf("%s_%s", channel.DeviceID, channel.ID)
if _, ok := atsMap.Load(key); !ok {
atsMap.Store(key, true)
} else {
return
}
channel.cleanRecordTime = time.Now()
ticker := time.NewTicker(10 * time.Second)
defer ticker.Stop()
for {
select {
case <-ticker.C:
if _, ok := atsMap.Load(key); !ok {
return
}
thisTime := time.Now()
//获取录像小时
if channel.GetRecordReserveDuration() > 0 && thisTime.After(channel.cleanRecordTime.Add(60*time.Second)) {
channel.CleanRecord()
}
再次修改云端录像天数一切正常:
本文就和大家分享到这里,如果大家对EasyGBS感兴趣的话,欢迎联系我们。EasyGBS平台能够给大家提供测试版本,让大家直观面对EasyGBS功能,欢迎试用。
推荐阅读
-
国标GB28181协议视频流媒体平台EasyGBS更新通道后音频被关闭是什么原因?
-
国标GB28181协议国标平台EasyGBS视频平台推送音视频复合流,播放视频黑屏是什么原因?
-
国标GB28181协议客户端EasyGBS视频平台更新后界面出现滚动条是什么原因导致的?
-
国标GB28181协议视频平台EasyGBS设备离线无法查看云端录像是什么原因?
-
国标GB28181协议视频平台EasyGBS的云端录像能够永久保存吗?会不会丢失?
-
国标GB28181协议视频平台EasyGBS级联上级平台时间戳为0是什么原因?
-
国标GB28181协议国标视频平台EasyGBS修改云端录像不起效是什么原因?
-
国标GB28181协议视频平台EasyGBS设备报错“开启了云端录像无法关闭按需直播”问题修复
-
网络摄像头IPC网页无插件直播国标gb28181协议视频平台EasyGBS开启云端录像后断流如何解决?
-
IP网络摄像头国标GB28181协议国标视频平台EasyGBS视频流RTSP,地址在VLC无法播放是什么原因?