飞道的博客

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

304人阅读  评论(0)

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

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

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

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


  
  1. if !gUpdateSession {
  2. gUpdateSession = true
  3. allInfos := make([]*SessionInfo, 0)
  4. // 1. 更新本地数据
  5. infos, err := getLiveSessions(consts.EmptyString)
  6. if err != nil {
  7. errorLogger.Error(err.Error())
  8. } else {
  9. allInfos = append(allInfos, *infos...)
  10. }
  11. // 2. 查看集群,如果有集群数据,则从集群中更新数据到全局中
  12. servers := cluster.GetServerALL()
  13. if servers != nil {
  14. for _, server := range servers {
  15. infos, err = getLiveSessions(fmt.Sprintf( "%v:%v", server[consts.FieldNameIP], server[consts.FieldNameDSSHttpPort]))
  16. if err != nil {
  17. errorLogger.Error(err.Error())
  18. } else {
  19. allInfos = append(allInfos, *infos...)
  20. }
  21. }
  22. }
  23. // 更新所有数据
  24. gLiveSessions.Update(allInfos)
  25. gUpdateSession = false
  26. }
  27. }

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

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

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


转载:https://blog.csdn.net/EasyDSS/article/details/110878657
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场