在线课堂、在线医疗视频直播点播系统EasyDSS的开发中,录像计划和直播计划可以说是我们对用户需求做出的更可控和智能的功能之一了,用户可以设定周一至周日中,某天某个时间段内开启录像,其他时间不录像。

在客户的实际测试当中,存在设定完录像计划和直播计划后失效的问题。客户现场中在指定时间段设置了推流计划以及录像计划,但是第二天发现还是在一直推流,录像文件也一直生成。

这个可能涉及到EasyDSS的鉴权功能。录像计划以及直播计划是在推流鉴权的逻辑中实现的,在产品更新的时候对鉴权这一块的代码进行了一次更改,每鉴权一次就会将返回状态存入内存,在这个反复的过程中导致数据的冗余,产生错误的数据,导致推流计划和录像计划失败。
我们可以从代码中将存入内存的方式给注释掉,因为通常的业务我们不需要将数据写入内存,这样也不实时。

参考代码如下:
if input == nil { return http.StatusInternalServerError } //key := input.GenerateKey() // //// 从结果队列中查询,查询到数据,返回数据 //result, exist := authService.Result.Get(key) //if exist { // // fmt.Println(key, "的处理结果为", result.HttpStatus) // // // 如果两次相同的请求,请求间隔时间大于1s,才进入处理队列。否则直接使用 1s 内的结果 // if time.Now().UnixNano()-result.ResultTime.UnixNano() >= 1*time.Second.Nanoseconds() { // // 加入到处理队列中 // authService.request(input) // } // // return result.HttpStatus //} else { // // 未查询到数据,直接处理 // // fmt.Println(key, "的处理为第一次请求") return authService.updateResult(input)
目前该套录像计划已经成功运用于除EasyDSS之外的EasyGBS、EasyCVR等平台,设定方式可以参考:EasyDSS在进行视频直播/录像回看时如何创建视频录像计划,另外如果有朋友感兴趣,可以下载测试。