解决RTMP推流协议视频直播点播平台EasyDSS内直播列表信息偶尔不存在的问题

TSINGSEE青犀视频团队在最近一年内对大部分已经开发的视频平台做了一次大的调整和优化,诸如EasyDSS、EasyGBS等视频平台在界面、操作方式、功能上都有了不同程度的改变。EasyDSS视频直播点播平台开发简单,提供编程语言无关化的RESTfulAPI接口,可以很便捷的进行二次开发和应用,在远程教育、远程医疗都具备优势。

微信截图_20201204152134.png

视频平台EasyDSS中如果在接入的设备过多的情况下,流媒体的处理系统偶尔会出现卡顿现象。此时如果频繁的请求在线直播信息的话,直播列表可能为空,导致直播列表信息返回为空。

20.png

因为一旦接入的数量过多,内核处理不过来,导致系统卡顿。这样的应用层在请求流媒体服务的时候就会请求不到任何的数据,但此时之前的数据又被删除了,所以出现了一小段时间的数据空白期。

因此解决问题的时候,我们就可以在项目启动的时候开启定时任务,每隔一秒钟对流媒体系统发送http的请求,将请求到的数据进行及时的更新。

    if !gUpdateSession {

      gUpdateSession = true

      allInfos := make([]*SessionInfo, 0)
      // 1. 更新本地数据
      infos, err := getLiveSessions(consts.EmptyString)
      if err != nil {
         errorLogger.Error(err.Error())
      } else {
         allInfos = append(allInfos, *infos...)
      }

      // 2. 查看集群,如果有集群数据,则从集群中更新数据到全局中
      servers := cluster.GetServerALL()
      if servers != nil {
         for _, server := range servers {
            infos, err = getLiveSessions(fmt.Sprintf("%v:%v", server[consts.FieldNameIP], server[consts.FieldNameDSSHttpPort]))
            if err != nil {
               errorLogger.Error(err.Error())
            } else {
               allInfos = append(allInfos, *infos...)
            }
         }
      }

      // 更新所有数据
      gLiveSessions.Update(allInfos)

      gUpdateSession = false
   }
}

更新后系统将会及时处理所有数据,避免空白段的情况出现。

21.png

该问题就此解决,如果大家比较关心我们前文提到的EasyDSS在实际项目中的运用,可以阅读:远程教育视频直播点播解决方案如何实现教学直播+录播+在线考试?

TSINGSEE青犀视频云边端架构产品还包括EasyGBS、EasyNVR、EasyCVR等优秀的视频智能分析平台,欢迎大家了解和测试。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章